我已经实现了一个otto总线示例。它工作正常,但仅在第二次参观活动时。EventBus不会在新活动中注册事件
例如,当我加载应用程序,并击中了秘密信息按钮我带到了活动,但敬酒不显示。然后,我点击后退按钮返回到MainActivity并再次点击显示保密消息按钮,当我被带到秘密消息活动时,显示吐司。我意识到这是第二次运作,因为我没有注销事件而造成泄漏。
有什么我缺少关于逻辑是什么?
MainActivity:
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;
}
}
EventBus:
public final class EventBus extends Bus{
private static final EventBus Bus = new EventBus();
public static Bus getInstance() {
return Bus;
}
private EventBus() {
}
}
因为你SecretMessageActivity不存在,当你的事件被触发,则不能接收该事件。 2次它正在工作,因为你的SecretMessageActivity实例仍在内存中。我想你会创建一个泄漏,因为你没有从EventBus注销。 – Christopher
谢谢......这就是为什么注销部分被注释掉了。所以我的问题是,我怎样才能第一次开火呢? – hpCode
你的用例是什么?也许你可以设置一个额外的你的意图,它启动你的SecretMessageActivity?另请参阅UMESH0492的答案。 – Christopher