我在 onReceive() 中声明一个新的 Activity,如下所示。
context.startActivity(new Intent(context, SecondActivity.class));
但无法在onReceive()中直接关闭activity。
我有一个静态变量,用于存储对新 Activity 的引用。
(上下文在 Activity 的 onCreate() 中分配)
所以我像这样在 onReceive() 中调用 finish() 。
SecondActivity.context.finish();
但我认为这不是一个好方法。有更好的方法吗?
我知道如果我的 BroadcastReceiver 是在 Activity 类中定义的,我可以直接在 onReceive() 中调用 finish() ,但是问题是,它将关闭“此”Activity,但不会关闭 onReceive() 中新创建的 Activity。当广播接收器是静态而非动态时,也无法调用 finish()。
最佳答案
I'm stating a new Activity in onReceive() like this.
这是一种强烈的代码味道,除非这是本地广播 (LocalBroadcastManager
),在这种情况下,它是较弱的代码味道。
I have a static variable which stores the reference to the new Activity.
这是一种很强烈的代码味道。
And also can't call finish() when the Broadcast Receiver is static, not dynamic.
根据系统广播更改 Activity 组合是另一种强烈的代码味道。
Is there a better approach for this?
考虑到所有代码的味道,我怀疑您的应用程序存在严重的架构问题。
话虽如此,一般的做法是不让外部各方以这种方式控制 Activity 。相反,您可以使用事件总线(LocalBroadcastManager
、greenrobot 的 EventBus)来引发事件。该 Activity (如果存在)可以监听这些事件并采取适当的操作,其中可能包括销毁自身。或者,响应式(Reactive)解决方案(RxJava/RxAndroid 等)可能会在这里有所帮助,在收到广播后,您会执行一些操作来触发由 Activity 注册的观察者。
关于java - 如何在 onReceive() 中关闭 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44871163/