如何在 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.
注册的观察者
我在 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.