オットーバスの例を実装しました。正常に動作しますが、アクティビティに 2 回目にアクセスしたときのみです。
たとえば、アプリを読み込んで秘密のメッセージ ボタンを押すと、アクティビティに移動しますが、トーストは表示されません。次に、[戻る] ボタンを押して MainActivity に戻り、[シークレット メッセージの表示] ボタンをもう一度押します。シークレット メッセージ アクティビティに移動すると、トーストが表示されます。イベントの登録を解除しないことでリークが発生したため、2 回目には機能することがわかりました。
ロジックについて私が見逃しているものはありますか?
主な活動:
public class MainActivity extends AppCompatActivity {
Button buttonSecretMessage;
Intent intentToMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentToMessage = new Intent(MainActivity.this, SecretMessageActivity.class);
buttonSecretMessage = (Button) findViewById(R.id.buttonSecretMessage);
buttonSecretMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getInstance().post(new MakeMySecretMessageEvent());
startActivity(intentToMessage);
}
});
}
}
秘密のメッセージ アクティビティ:
public class SecretMessageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secret_message);
}
@Subscribe
public void getMySecretMessage(MakeMySecretMessageEvent event){
Toast.makeText(this, event.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
protected void onStart(){
super.onStart();
EventBus.getInstance().register(this);
}
@Override
protected void onStop() {
super.onStop();
//EventBus.getInstance().unregister(this);
}
}
MakeMySecretMessageEvent:
public class MakeMySecretMessageEvent {
public MakeMySecretMessageEvent() {
}
public String getMessage() {
String message = "YOU ARE AWESOME!";
return message;
}
}
イベントバス:
public final class EventBus extends Bus{
private static final EventBus Bus = new EventBus();
public static Bus getInstance() {
return Bus;
}
private EventBus() {
}
}