判斷Android程序是否在後臺中運行

實現推送功能時,有這麼一種場景,當接收到推送後需要先判斷程序是否在後臺運行,若在後臺那麼切換程序到前臺,然後再顯示相應的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);




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章