我在Android的应用类中注册了广播接收器,但现在我的问题是在哪里注销广播呢?
public class MyApplication extends Application
{
@Override
public void onCreate() {
.....
// OTHER INITIALIZATIONS
initNetworkBR();
}
private void initNetworkBR() {
br = new BroadcastReceiver() {
....
};
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(br, filter);
}
}发布于 2017-11-23 12:04:53
其中一项建议是在您的启动程序活动或所需的活动中注销如下所示:
@Override
protected void onDestroy() {
super.onDestroy();
((MyApplication) getApplication()).unregisterReceiver();
}并在unregisterReceiver类中实现MyApplication方法:
public void unregisterReceiver() {
unregisterReceiver(br);//your broadcast
}发布于 2017-11-23 12:04:34
除了在应用程序类中使用广播接收器之外,您还可以在所有活动中使用基类。并在Base活动中注册BR,然后向childs提供回调。由于活动具有严格的生命周期模型,所以在活动中使用运行时广播接收器比在应用程序类中使用更好。
public class BaseActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
//registerReceiver Here
}
@Override
protected void onPause() {
super.onPause();
//unregisterReceiver here
}
}发布于 2022-06-30 13:16:41
我使用Application.ActivityLifecycleCallbacks,它侦听来自活动生命周期的所有回调。它可以替代使用一个使用继承的基本活动的建议,而另一方面,使用组合来解决这个问题。
在类中实现Application.ActivityLifecycleCallbacks接口,在应用程序类创建时将回调注册为继续:
registerActivityLifecycleCallbacks(<here your typed class with ActivityLifecycleCallbacks>)然后,您可以完全控制所有的活动生命周期来做一些事情,比如注销或注册接收者。
我希望这能帮上忙
https://stackoverflow.com/questions/47455040
复制相似问题