Android-如何检测堆栈中的最终活动

Android-如何检测堆栈中的最终活动,android,android-activity,android-lifecycle,back-stack,android-task,Android,Android Activity,Android Lifecycle,Back Stack,Android Task,我使用下面的代码检查活动中的最后片段,弹出一个对话框 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if there is only one fragment if (keyCode == KeyEvent.KEYCODE_BACK) { if (getSupportFragmentManager().getBackStackEn

我使用下面的代码检查
活动中的最后
片段
,弹出一个对话框

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if there is only one fragment
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
                DlgUniversalError.shallIQuit(this, getApplicationContext()
                        .getResources().getString(R.string.doYouWantToQuit),
                        getSupportFragmentManager());
                return false;
            }
        }
        return super.onKeyDown(keyCode, event);
    }


现在假设我有一组
活动
s。如何对
活动执行相同的操作
活动是否是堆栈中的最后一个,并弹出退出对话框?

假设您有活动1、2、3。。。它们的流程是:

Activity 1 -> Activity 2 -> Activity 3 -> ... and so on
您真正拥有的唯一选择是在
活动1
中,重写
onBackPressed()
方法,如下所示:

@Override
public void onBackPressed(){

    /* Call the Quit Dialog here. If user presses YES,
     * call super.onBackPressed(), else if user presses NO,
     * do nothing. */

}
片段
backstack对于应用程序是本地的,而
活动
backstack对于应用程序是本地的。现在有两种方法可以检查当前任务的
活动的状态
backbackback:

    ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
    List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

    if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
        /* do whatever you want e.g. super.onBackPressed() etc. */
    }
1.说你的
活动
流程是

A1 -> A2 -> A3 -> A1 -> A2 -> A3 -> A1 ...
可以确保
活动1
总是以空的backbackback开始。每次启动
活动1
时,请使用以下标志调用它:

2.有一个名为的方法,可以让您知道
活动
是否是该任务中的第一个
活动
,即该任务的后台的最后一个
活动
。这看起来很有希望

3.还有一种方法可以确定
活动是否是backbackback上的最后一个活动:

    ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
    List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

    if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
        /* do whatever you want e.g. super.onBackPressed() etc. */
    }
ActivityManager mngr=(ActivityManager)getSystemService(ACTIVITY_服务);
List taskList=mngr.getRunningTasks(10);
if(taskList.get(0).numActivities==1&&taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())){
/*做任何你想做的事,例如super.onBackPressed()等*/
}
为此,向清单中添加android.permission.GET_TASKS
权限


就这样……:)

是的。。。没错。。。。怎么样:
Activity 1->Activity 2->Activity 3->Activity 1->Activity 3
我使用了不同的导航设计,正如你在第一条评论中建议的那样。。。。与我的问题相比,这是一个很好的用户模式。。。。。谢谢你的信息
getRunningTasks
现在不推荐使用。我不确定我是否理解这个问题,但它让我想到了以下几点: