Android
Otto Event Bus
Sök…
Anmärkningar
Otto avskrivs till förmån för RxJava
och RxAndroid
. Dessa projekt tillåter samma händelsestyrda programmeringsmodell som Otto, men de är mer kapabla och erbjuder bättre kontroll över trådarna.
Passerar en händelse
Det här exemplet beskriver passering av en händelse med Otto Event Bus .
För att använda Otto Event Bus i Android Studio måste du infoga följande uttalande i din modulgradfil:
dependencies {
compile 'com.squareup:otto:1.3.8'
}
Händelsen som vi vill passera är ett enkelt Java-objekt:
public class DatabaseContentChangedEvent {
public String message;
public DatabaseContentChangedEvent(String message) {
this.message = message;
}
}
Vi behöver en buss för att skicka händelser. Detta är vanligtvis en singleton:
import com.squareup.otto.Bus;
public final class BusProvider {
private static final Bus mBus = new Bus();
public static Bus getInstance() {
return mBus;
}
private BusProvider() {
}
}
Om du vill skicka en händelse som vi bara behöver vår BusProvider och det är post
Här skickar vi en händelse om handlingen i en AsyncTask är klar:
public abstract class ContentChangingTask extends AsyncTask<Object, Void, Void> {
...
@Override
protected void onPostExecute(Void param) {
BusProvider.getInstance().post(
new DatabaseContentChangedEvent("Content changed")
);
}
}
Ta emot en händelse
För att ta emot en händelse är det nödvändigt att implementera en metod med händelsetypen som parameter och kommentera den med @Subscribe
. Dessutom måste du registrera / avregistrera förekomsten av ditt objekt på BusProvider
(se exempel Skicka en händelse ):
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);
}
}
Viktigt: För att få den händelsen måste en instans av klassen existera. Detta är vanligtvis inte fallet när du vill skicka ett resultat från en aktivitet till en annan aktivitet. Så kolla ditt användningsfall för evenemangsbussen.