如何在 onReceive() 中关闭 Activity

How to close an Activity in onReceive()

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

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

但是不能在onReceive().

中直接关闭activity

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

(上下文在Activity的onCreate()中赋值)

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

SecondActivity.context.finish();

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

我知道我可以直接在 onReceive() 中调用 finish() 如果我的 BroadcastReceiver 是在 Activity class 中定义的,但问题是,它会关闭 'this' Activity 但不会关闭 [=27 中新创建的 Activity =]onReceive()。当广播接收器是静态的而不是动态的时,也不能调用 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.

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

Is there a better approach for this?

鉴于所有代码异味,我怀疑您的应用存在严重的架构问题。

话虽如此,一般方法是而不是让外部各方以这种方式控制活动。相反,您使用事件总线(LocalBroadcastManager,greenrobot 的 EventBus)来引发事件。 activity,如果存在,可以侦听这些事件并采取适当的行动,其中可能包括销毁自身。或者,反应性解决方案(RxJava/RxAndroid 等)可能会在这里有所帮助,在收到广播后,您会执行一些操作来触发由 activity.

注册的观察者