当应用关闭时,Android会禁用BroadcastReceiver

时间:2012-03-23 11:52:27

标签: android android-intent android-manifest

我在我的Android应用程序的清单文件中声明了广播接收。一切正常。但是,当应用程序关闭时(通过Android设置中的“强制停止”按钮),广播接收器仍然会响应广播并再次激活我的应用程序。

有关如何阻止这种情况的任何想法吗?

由于

3 个答案:

答案 0 :(得分:2)

已经有answer了。

基本上,您通过Application类的onDestroy方法中的PackageManager禁用广播接收器,并在Application类的onCreate方法中再次启用它。

答案 1 :(得分:1)

应用程序没有onDestroy方法。它有onTerminate但它永远不会被称为=(

这是我的解决方案。我的应用程序中有MainActivity,如果app正常工作,肯定必须处于活动状态。所以在广播接收器中,我总是检查MainActiviy是否正在运行。

public void onReceive(final Context context, final Intent intent){
   if(isAppRunning(context)){
       // Do my handling
   }
   else{
       // You can disable receiver here
       Log.w(LOGTAG, "App not running. Ignore " + LOGTAG + " call.");
   }
}

protected boolean isAppRunning(Context context){ String activity = MainActivity.class.getName(); ActivityManager activityManager = (ActivityManager)context. getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> tasks = activityManager. getRunningTasks(Integer.MAX_VALUE); for(RunningTaskInfo task : tasks){ if(activity.equals(task.baseActivity.getClassName())){ return true; } } return false; }

答案 2 :(得分:0)

在Activity的onDestroy方法和onPause()中调用unregisterReceiver。 在onCreate()和OnResume()中注册。