如何查找活动是否是堆栈中的最后一个活动

use*_*005 13 android android-intent android-activity back-stack activity-manager

我在我的应用程序中打开一个链接,一旦按下后我想显示HomePage以保留用户更多时间.我一直在努力实现这一目标但却无法做到这一点.我将homeLauncher活动作为我的top和baseActivity.

DeepLink Tap>打开所需的活动>用户按下后退按钮>检查其上一个活动但不是homeActivity>如果是,请将用户导航到homeActivity.

尝试以下代码:

@Override
public void onBackPressed() {
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())){
  //// This is last activity
}
else{
    //// There are more activities in stack
}

super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

Android Studio Evalation

我也试过isTaskRoot但结果是一样的.它没有给出正确的答案.请帮助

小智 5

使用 isTaskRoot() 方法。(来自 h9kdroid评论 -此处

@Override
public void onBackPressed() {
   ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
   List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

   if(isTaskRoot()){
     //// This is last activity
   } else{
     //// There are more activities in stack
   }

   super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 0

请注意,以下解决方案仅适用于 API14+。

创建自定义应用程序类;

public class App extends Application {

    private int created;

    @Override
    public void onCreate() {
        registerActivityLifecycleCallbacks(new Callbacks());
    }

    public int getCreated() {
        return created;
    }

    private class Callbacks implements ActivityLifecycleCallbacks {

        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            created++;
        }

        @Override
        public void onActivityDestroyed(Activity activity) {
            created--;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在应用程序元素的 AndroidManifest.xml 中注册它;

<application name=".App"/>
Run Code Online (Sandbox Code Playgroud)

在通过深层链接打开的活动中,使用以下代码;

@Override
public void onBackPressed() {
    if (((App) getApplicationContext()).getCreated() == 1) {
        // start your home activity
    }

    super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

我凭空写下了这个,所以我没有机会测试它,但理论上它应该有效。