我在 onReceive()中声明了一个新的活动。
context.startActivity(new Intent(context, SecondActivity.class));
但无法直接在 onReceive()中关闭活动。
我有一个静态变量,用于存储对新Activity的引用。
(上下文在活动的 onCreate()中指定)
所以我在 onReceive()中调用 finish()就像这样。
SecondActivity.context.finish();
但我不认为这是一个好方法。对此有更好的方法吗?
我知道如果我的 BroadcastReceiver 在Activity类中定义,我可以直接在 onReceive()中调用 finish(),但是问题是,它会关闭这个'活动,但不是 onReceive()中新创建的活动。当广播接收器是静态的而不是动态的时,也不能调用完成()。
答案 0 :(得分:4)
我在onReceive()中声明了一个新的活动。
这是一个强烈的代码气味,除非这是一个本地广播(LocalBroadcastManager
),在这种情况下,它是一个较弱的代码气味。
我有一个静态变量,用于存储对新Activity的引用。
这是一种强烈的代码味道。
当广播接收器是静态的而不是动态的时,也不能调用finish()。
根据系统广播改变活动组合是另一种强烈的代码味道。
对此有更好的方法吗?
考虑到所有代码的味道,我怀疑你的应用程序存在重大的架构问题。
话虽如此,一般的方法是不让外部各方以这种方式控制活动。相反,您使用事件总线(LocalBroadcastManager
,greenrobot的EventBus)来引发事件。活动(如果存在)可以监听这些事件并采取适当的措施,其中可能包括破坏自身。或者,反应性解决方案(RxJava / RxAndroid等)可能在这里有所帮助,在接收到广播时,您会做一些触发活动注册的观察者的事情。