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

时间:2015-06-07 19:36:55

标签: android android-intent android-activity stack

通常,点击后退按钮时,我会调用finish(),然后我会回到之前的activity(这是我的MenuActivity):

@Override
public void onBackPressed() {

    finish();

}

但是,有时单击后退按钮并且应用程序退出时,没有其他activities正在运行。有没有办法可以检查activity是否存在,或者是在后台/ 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()          
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我认为,它可能会对您有所帮助

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)弃用了