Android
ओटो इवेंट बस
खोज…
टिप्पणियों
ओटो है पदावनत के पक्ष में RxJava
और RxAndroid
। ये परियोजनाएं ओटो के रूप में एक ही घटना-संचालित प्रोग्रामिंग मॉडल की अनुमति देती हैं, लेकिन वे अधिक सक्षम हैं और थ्रेडिंग के बेहतर नियंत्रण की पेशकश करते हैं।
किसी घटना को पार करना
यह उदाहरण ओटो इवेंट बस का उपयोग करके एक घटना को पारित करने का वर्णन करता है।
एंड्रॉइड स्टूडियो में ओटो इवेंट बस का उपयोग करने के लिए आपको अपने मॉड्यूल ग्रेडल फ़ाइल में निम्न कथन सम्मिलित करना होगा:
dependencies {
compile 'com.squareup:otto:1.3.8'
}
जिस घटना को हम पास करना चाहते हैं वह एक साधारण जावा ऑब्जेक्ट है:
public class DatabaseContentChangedEvent {
public String message;
public DatabaseContentChangedEvent(String message) {
this.message = message;
}
}
हमें ईवेंट भेजने के लिए बस की आवश्यकता है। यह आमतौर पर एक सिंगलटन है:
import com.squareup.otto.Bus;
public final class BusProvider {
private static final Bus mBus = new Bus();
public static Bus getInstance() {
return mBus;
}
private BusProvider() {
}
}
एक घटना भेजने के लिए हमें केवल हमारे BusProvider की आवश्यकता है और यह post
विधि है। यदि कोई AsyncTask की कार्रवाई पूरी हो जाती है तो हम यहां एक घटना भेजते हैं:
public abstract class ContentChangingTask extends AsyncTask<Object, Void, Void> {
...
@Override
protected void onPostExecute(Void param) {
BusProvider.getInstance().post(
new DatabaseContentChangedEvent("Content changed")
);
}
}
एक घटना प्राप्त करना
एक ईवेंट प्राप्त करने के लिए पैरामीटर के रूप में ईवेंट प्रकार के साथ एक विधि को लागू करना और इसे @Subscribe
का उपयोग करके एनोटेट करना @Subscribe
। इसके अलावा आपको BusProvider
में अपनी वस्तु के उदाहरण को पंजीकृत / अपंजीकृत करना BusProvider
(उदाहरण एक घटना भेजना देखें):
public class MyFragment extends Fragment {
private final static String TAG = "MyFragment";
...
@Override
public void onResume() {
super.onResume();
BusProvider.getInstance().register(this);
}
@Override
public void onPause() {
super.onPause();
BusProvider.getInstance().unregister(this);
}
@Subscribe
public void onDatabaseContentChanged(DatabaseContentChangedEvent event) {
Log.i(TAG, "onDatabaseContentChanged: "+event.message);
}
}
महत्वपूर्ण: उस घटना को प्राप्त करने के लिए कक्षा का एक उदाहरण मौजूद होना चाहिए। यह आमतौर पर ऐसा नहीं होता है जब आप एक गतिविधि से दूसरी गतिविधि के लिए परिणाम भेजना चाहते हैं। इसलिए इवेंट बस के लिए अपने उपयोग के मामले की जाँच करें।