【问题标题】:How to check for existing activities when back button pressed按下后退按钮时如何检查现有活动
【发布时间】:2015-06-07 19:36:55
【问题描述】:

一般情况下,当点击返回按钮时,我调用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()          
    }
}

【问题讨论】:

标签: android android-intent android-activity stack


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我想,可能对你有帮助

    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) 已弃用此方法

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 2013-08-08
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多