尝试过不同的手机,开始的时候用总线模式时在不同页面之间。比如activity注销,想着用总线模式,全部destroy掉。
public class BaseActivity extends Activity{
@Subscribe
public void destroyAll(DestroyAllActivityEvent event){
finish();
}
}
结果是有的手机可以有的不可以。后来我思考了原因,明白了。总线模式不适合不同activity之间的互相更新。
因为前一个activity存在被回收的可能,一旦回收,就收不到通知,无法更新了!
onDestroy后会调用onDetachView,我试图在onDetachView里停止订阅EventBus.getDefault().unregister(this);也不行。这种方式成功率不能保证。所以还是用startActivityForResult+onActivityResult的方式更好。
那么这种方式就有限制了,放在哪里好呢?
回调
网络请求之后的回调,可以直接用EventBus,更加方便。
fragment和activity之间的通信
省的写listener了。
子界面,如viewpager里面有view,或者是dialog数据回传
这里用很好,因为直接写要写监听会比较麻烦。
service通信
service创建后,必须要用binder的getService才能拿到对象,里面的方法调用麻烦,用这种方式,可以很容易的实现activity和service数据传输。
broadcastReceiver
这个同上
以上是使用总线模式比较好的点。