按下后退按钮时如何检查现有活动

How to check for existing activities when back button pressed

一般情况下,当点击后退按钮时,我调用finish(),我被带回之前的activity(这是我的MenuActivity):

@Override
public void onBackPressed() {

    finish();

}

但是,有时当单击后退按钮时没有其他 activities 运行 并且应用程序只是退出。有没有一种方法可以检查 activity 是否存在或 运行 处于 background/in onPause 状态等...

我想写这样的东西:

@Override
public void onBackPressed() {

    if(isActivitiesInStack) //if there are still activities in stack

        finish(); //simply call finish and be taken back to next activity

    else { // else, there are no acitivites in the stack

        Intent intent = new Intent(ThisActivity.this, MenuActivity.class); // then create an intent and send me to the menu acitivy
        startActivity(intent);
        finish()          
    }
}

如果您知道 activity 想进入 onBackPressed(),您可以用 FLAG_ACTIVITY_CLEAR_TOP 开始 activity。如果实例存在,它将切换到 MenuActivity 的实例,但它也会删除当前 activity 实例和 MenuActivity 实例之间的所有 activity 实例。在另一种情况下,它只会启动一个新实例。

Intent intent = new Intent(context, MenuActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

我想,可能对你有帮助

public boolean isRunning(Context ctx) {
    ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

    for (RunningTaskInfo task : tasks) {
        if (ctx.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) 
            return true;                                  
    }

    return false;
}

无论如何,此方法已被弃用 Android API 21 (Lollipop)