BroadcastReceiver
我在 MainActivity.java 中有一个扩展类我启动了监听器
registerReceiver(
new ConnectivityChangeReceiver(),
new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION));
我发现当我退出应用程序时,它会在日志中显示以下错误:
E/ActivityThread:Activity com.webserveis.app.myconnection.MainActivity 泄露了最初在这里注册的 IntentReceiver com.webserveis.app.myconnection.ConnectivityChangeReceiver@32ad932e。您是否错过了对 unregisterReceiver() 的调用?android.app.IntentReceiverLeaked: Activity com.webserveis.app.myconnection.MainActivity 已经泄露了最初在这里注册的 IntentReceiver com.webserveis.app.myconnection.ConnectivityChangeReceiver@32ad932e。您是否错过了对 unregisterReceiver() 的调用?
最初是在这里注册的。您是否错过了对 unregisterReceiver() 的呼叫
在onStop()
我想注销监听器,但不是如何实现它
在实现BroadcastReceiver时,重要的是要知道我们必须注册和取消注册接收器,但 在 onStop() 中取消接收器并不是一个好习惯,这就是原因,您可以在文档中看到:
当您的实施需要登录时,
onResume()
有一个重要的考虑因素。关于你的错误:
文档本身指出:
所以 :
我添加一个例子:
你应该将你
BroadcastReceiver
的变量存储在你的MainActivity
和你的onStop()
看跌期权中unregisterReceiver(myBroadcastReceiver);
您必须考虑到,如果您在
onStop()
没有BroadcastReceiver
事先注册的情况下通过它,将会抛出异常。一切顺利