Android 即使在onDestroy()中取消注册后,广播接收器仍在接收
我的活动方式是Android 即使在onDestroy()中取消注册后,广播接收器仍在接收,android,broadcastreceiver,Android,Broadcastreceiver,我的活动方式是 class MainActivity extends Activity{ onCreate(bundleInstnace){ super.onCreate(bundleInstnace); //IntentFilter intentFilter with some actions registerReceiver(myReceiver, intentFilter); } onDestroy(){ super.onDestroy(); try{ unregist
class MainActivity extends Activity{
onCreate(bundleInstnace){
super.onCreate(bundleInstnace);
//IntentFilter intentFilter with some actions
registerReceiver(myReceiver, intentFilter);
}
onDestroy(){
super.onDestroy();
try{
unregisterReceiver(myReceiver)
}catch(Exception e){}
}
final Receiver myReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent){
//functionality based on actions
}
}
}
即使我正在onDestroy中注销我的接收器,即使在调用onDestroy之后,广播接收器仍然能够接收。我尝试了在onStart中注册和在onStop中注销,但仍然是一样的。你能帮我找到我丢失的确切位置吗。问题的发生是随机的。请致电super.ondestory;在注销接收者之后。尽管不建议使用onDestroy,因为它不能保证被调用。改用桌面
您应该在onResume中注册接收方,并在onPause中注销接收方:
在onReceive of Broadcastreceiver和onDestroy中添加记录器,以查看是否在onDestroy之后调用了Broadcastreceiver。然后我们可以试着找出原因。@Ranjith:Yes Ranjith,onReceive的登录在onDestroy之后被调用,00:05:58.630-OnDestroy输入00:05:58.630-OnDestroy出口00:05:58.700-从OnReceive@sureshn:您是否已在AndroidManifest.xml`中声明您的接收者,并带有一个节?@Squonk,否,我正在创建意图过滤器,并向其添加操作,并在onCreate lifecycle方法中注册。@sureshn:如果是这种情况,则表明对unregisterReceiver的调用失败。您有一个空的捕捉块。。。。捕获异常{}。永远不要使用空的catch块,因为它们可以隐藏错误。至少放e.printStackTrace;在那里,检查logcat是否记录了任何错误。@Abhisek,我尝试了两种方法,但结果仍然相同
onDestroy(){
try{
unregisterReceiver(myReceiver)
}catch(Exception e){}
super.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(myReceiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
try {
unregisterReceiver(myReceiver);
} catch (IllegalArgumentException e) {
// Log here or ignore
}
}