如何关闭onReceive()中的Activity

时间:2017-07-02 13:10:00

标签: java android android-activity broadcastreceiver

我在 onReceive()中声明了一个新的活动。

context.startActivity(new Intent(context, SecondActivity.class));

但无法直接在 onReceive()中关闭活动。

我有一个静态变量,用于存储对新Activity的引用。

(上下文在活动的 onCreate()中指定)

所以我在 onReceive()中调用 finish()就像这样。

SecondActivity.context.finish();

但我不认为这是一个好方法。对此有更好的方法吗?

我知道如果我的 BroadcastReceiver 在Activity类中定义,我可以直接在 onReceive()中调用 finish(),但是问题是,它会关闭这个'活动,但不是 onReceive()中新创建的活动。当广播接收器是静态的而不是动态的时,也不能调用完成()

1 个答案:

答案 0 :(得分:4)

  

我在onReceive()中声明了一个新的活动。

这是一个强烈的代码气味,除非这是一个本地广播(LocalBroadcastManager),在这种情况下,它是一个较弱的代码气味。

  

我有一个静态变量,用于存储对新Activity的引用。

这是一种强烈的代码味道。

  

当广播接收器是静态的而不是动态的时,也不能调用finish()。

根据系统广播改变活动组合是另一种强烈的代码味道。

  

对此有更好的方法吗?

考虑到所有代码的味道,我怀疑你的应用程序存在重大的架构问题。

话虽如此,一般的方法是让外部各方以这种方式控制活动。相反,您使用事件总线(LocalBroadcastManager,greenrobot的EventBus)来引发事件。活动(如果存在)可以监听这些事件并采取适当的措施,其中可能包括破坏自身。或者,反应性解决方案(RxJava / RxAndroid等)可能在这里有所帮助,在接收到广播时,您会做一些触发活动注册的观察者的事情。