खोज…


वाक्य - विन्यास

  • @ सदस्यता समाप्त करें

पैरामीटर

थ्रेड मोड विवरण
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 को तर्क के रूप में लेते हैं और उन्हें उस थ्रेड पर कॉल करें जिसे वे कॉल करना चाहते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow