繁体   English   中英

如何在onReceive()中关闭活动

[英]How to close an Activity in onReceive()

我正在像这样在onReceive()中声明一个新的Activity。

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

但是不能直接在onReceive()中关闭活动。

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

(上下文是在Activity的onCreate()中分配的)

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

SecondActivity.context.finish();

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

我知道如果我的BroadcastReceiver是在Activity类中定义的,那么我可以直接在onReceive ()中直接调用finish() ,但是问题是,它将关闭“ this”活动,而不是onReceive()中新创建的Activity。 并且,当广播接收器是静态的而不是动态的时,也不能调用finish()

我正在像这样在onReceive()中声明一个新的Activity。

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

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

那是强烈的代码气味。

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

根据系统广播更改活动混合是另一个强烈的代码味道。

有更好的方法吗?

考虑到所有代码的味道,我怀疑您的应用程序存在严重的体系结构问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM