Android
GreenRobot EventBus
खोज…
वाक्य - विन्यास
- @ सदस्यता समाप्त करें
पैरामीटर
थ्रेड मोड | विवरण |
---|---|
ThreadMode.POSTING | उसी थ्रेड पर कॉल किया जाएगा जिस पर ईवेंट पोस्ट किया गया था। यह डिफ़ॉल्ट मोड है। |
ThreadMode.MAIN | मुख्य UI थ्रेड पर कहा जाएगा। |
ThreadMode.BACKGROUND | एक पृष्ठभूमि धागा पर बुलाया जाएगा। यदि पोस्टिंग थ्रेड मुख्य थ्रेड नहीं है, तो इसका उपयोग किया जाएगा। यदि मुख्य थ्रेड पर पोस्ट किया गया है तो EventBus का एक ही बैकग्राउंड थ्रेड है जो इसका उपयोग करेगा। |
ThreadMode.ASYNC | अपने ही धागे पर बुलाया जाएगा। |
ईवेंट ऑब्जेक्ट बनाना
ईवेंट भेजने और प्राप्त करने के लिए हमें सबसे पहले एक इवेंट ऑब्जेक्ट की आवश्यकता होती है। इवेंट ऑब्जेक्ट वास्तव में सरल POJO हैं।
public class ArbitaryEvent{
public static final int TYPE_1 = 1;
public static final int TYPE_2 = 2;
private int eventType;
public ArbitaryEvent(int eventType){
this.eventType = eventType;
}
public int getEventType(){
return eventType;
}
}
घटनाएँ प्राप्त करना
इवेंट प्राप्त करने के लिए आपको EventBus
पर अपनी कक्षा को पंजीकृत करना EventBus
।
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
और फिर घटनाओं की सदस्यता लें।
@Subscribe(threadMode = ThreadMode.MAIN)
public void handleEvent(ArbitaryEvent event) {
Toast.makeText(getActivity(), "Event type: "+event.getEventType(), Toast.LENGTH_SHORT).show();
}
घटनाएँ भेजना
ईवेंट ऑब्जेक्ट को बनाना और फिर उसे पोस्ट करना आसान है।
EventBus.getDefault().post(new ArbitaryEvent(ArbitaryEvent.TYPE_1));
एक साधारण घटना गुजर रही है
पहली चीज़ जो हमें करने की ज़रूरत है, वह है कि EventBus को हमारे मॉड्यूल के ग्रेड फ़ाइल में जोड़ें:
dependencies {
...
compile 'org.greenrobot:eventbus:3.0.0'
...
}
अब हमें अपने ईवेंट के लिए एक मॉडल बनाने की आवश्यकता है। इसमें वह कुछ भी हो सकता है जिसे हम पास करना चाहते हैं। अभी के लिए हम सिर्फ एक खाली वर्ग बनाएंगे।
public class DeviceConnectedEvent
{
}
अब हम अपनी Activity
में कोड जोड़ सकते हैं जो EventBus के साथ पंजीकृत हो जाएगा और घटना की सदस्यता लेगा।
public class MainActivity extends AppCompatActivity
{
private EventBus _eventBus;
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_eventBus = EventBus.getDefault();
}
@Override
protected void onStart ()
{
super.onStart();
_eventBus.register(this);
}
@Override
protected void onStop ()
{
_eventBus.unregister(this);
super.onStop();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onDeviceConnected (final DeviceConnectedEvent event)
{
// Process event and update UI
}
}
इस Activity
हमें EventBus
onCreate()
विधि में EventBus
का एक उदाहरण मिलता है। हम onStart()
/ onStop()
में घटनाओं के लिए पंजीकरण / अपंजीकृत करते हैं। यह याद रखना महत्वपूर्ण है कि जब आपका श्रोता गुंजाइश खो देता है या आप अपनी Activity
को लीक कर सकते हैं तो अपंजीकृत करना याद रखें।
अंत में हम उस विधि को परिभाषित करते हैं जिसे हम घटना के साथ कहते हैं। @Subscribe
एनोटेशन @Subscribe
बताता है कि वह किन तरीकों से घटनाओं को संभालने के लिए देख सकता है। @Subscribe
साथ @Subscribe
करने के लिए आपके पास @Subscribe
साथ कम से कम एक विधियाँ होनी चाहिए या यह एक अपवाद फेंक देगा। एनोटेशन में हम थ्रेड मोड को परिभाषित करते हैं। यह EventBus बताता है कि विधि को कॉल करने के लिए कौन सा धागा है। यह बैकग्राउंड थ्रेड से UI थ्रेड तक जानकारी भेजने का एक बहुत ही आसान तरीका है! ठीक यही हम यहाँ कर रहे हैं। ThreadMode.MAIN
अर्थ है कि यह विधि Android के मुख्य UI थ्रेड पर कॉल की जाएगी, इसलिए यहां किसी भी UI हेरफेर को करना सुरक्षित है, जिसकी आपको आवश्यकता है। विधि का नाम मायने नहीं रखता। केवल सोचता है, अन्य कि @Subscribe
एनोटेशन, कि EventBus की तलाश है तर्क का प्रकार है। जब तक कोई घटना पोस्ट की जाती है, तब तक यह मेल खाता है।
अंतिम बात हमें एक घटना पोस्ट करने के लिए यह करने की आवश्यकता है। यह कोड हमारी Service
में होगा।
EventBus.getDefault().post(new DeviceConnectedEvent());
यही सब है इसके लिए! EventBus उस DeviceConnectedEvent को लेगा और उसके पंजीकृत श्रोताओं के माध्यम से देखेगा, उन विधियों के माध्यम से देखेगा, जिनकी उन्होंने सदस्यता ली है और जो एक DeviceConnectedEvent को तर्क के रूप में लेते हैं और उन्हें उस थ्रेड पर कॉल करें जिसे वे कॉल करना चाहते हैं।