首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从应用程序类中注销广播接收器?

如何从应用程序类中注销广播接收器?
EN

Stack Overflow用户
提问于 2017-11-23 11:58:28
回答 7查看 3.5K关注 0票数 2

我在Android的应用类中注册了广播接收器,但现在我的问题是在哪里注销广播呢?

代码语言:javascript
复制
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);
   }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-11-23 12:04:53

其中一项建议是在您的启动程序活动或所需的活动中注销如下所示:

代码语言:javascript
复制
@Override
protected void onDestroy() {
    super.onDestroy();
    ((MyApplication) getApplication()).unregisterReceiver();
}

并在unregisterReceiver类中实现MyApplication方法:

代码语言:javascript
复制
public void unregisterReceiver() {
     unregisterReceiver(br);//your broadcast
}
票数 3
EN

Stack Overflow用户

发布于 2017-11-23 12:04:34

除了在应用程序类中使用广播接收器之外,您还可以在所有活动中使用基类。并在Base活动中注册BR,然后向childs提供回调。由于活动具有严格的生命周期模型,所以在活动中使用运行时广播接收器比在应用程序类中使用更好。

代码语言:javascript
复制
 public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onResume() {
        super.onResume();
        //registerReceiver Here
    }

    @Override
    protected void onPause() {
        super.onPause();
        //unregisterReceiver here
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-06-30 13:16:41

我使用Application.ActivityLifecycleCallbacks,它侦听来自活动生命周期的所有回调。它可以替代使用一个使用继承的基本活动的建议,而另一方面,使用组合来解决这个问题。

在类中实现Application.ActivityLifecycleCallbacks接口,在应用程序类创建时将回调注册为继续:

代码语言:javascript
复制
registerActivityLifecycleCallbacks(<here your typed class with ActivityLifecycleCallbacks>)

然后,您可以完全控制所有的活动生命周期来做一些事情,比如注销或注册接收者。

我希望这能帮上忙

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47455040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档