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
    }
}