實現推送功能時,有這麼一種場景,當接收到推送後需要先判斷程序是否在後臺運行,若在後臺那麼切換程序到前臺,然後再顯示相應的Activity,若不再後臺,那麼啓動程序,然後進行再相應操作,所以第一步需要判斷程序是否在後臺運行(在BroadcastReceiver中判斷).
我們使用第一種方法測試:
public boolean isProcessRunning(Context context) {
mContext = context.getApplicationContext();
activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = mContext.getPackageName();
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null) return false;
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(packageName)) {
return true;
}
}
return false;
}
方法返回true,即便我們退出了整個程序,進程仍然沒有關閉.接下來試了網上的辦法,還是不行:
1.android.os.Process.killProcess(android.os.Process.myPid());
2.System.exit(0);
3.ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
manager.killBackgroundProcesses(package);
4.Intent MyIntent = new Intent(Intent.ACTION_MAIN);
MyIntent.addCategory(Intent.CATEGORY_HOME);
startActivity(MyIntent);
finish();
但是小米自帶的一鍵清理是可以的.如果有知道解決辦法的留個言咯.我們換一種方法來判斷是否程序在後臺運行:
public boolean isBackgroundRunning(Context context) { mContext = context.getApplicationContext(); activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); String packageName = mContext.getPackageName(); List<RunningTaskInfo> list = activityManager.getRunningTasks(100); if (list == null && list.size() == 0) return false; for (RunningTaskInfo info : list) { if (info.topActivity.getPackageName().equals(packageName) || info.baseActivity.getPackageName().equals(packageName)) { return true; } } return false; }
這個方法是可以的,然後跳轉到Activity中:
myIntent.setAction(Intent.ACTION_MAIN);
myIntent.addCategory(Intent.CATEGORY_LAUNCHER);
myIntent.setClass(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
如果程序已經退出,執行相應的代碼:
myIntent.setClass(context, InitActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);