我在我的Android应用程序的清单文件中声明了广播接收。一切正常。但是,当应用程序关闭时(通过Android设置中的“强制停止”按钮),广播接收器仍然会响应广播并再次激活我的应用程序。
有关如何阻止这种情况的任何想法吗?
由于
答案 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()中注册。