You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API 21-22获取任务栈顶层Activity实现页面跳转合规校验

低版本适配方案

方案1:直接补全else分支(适配API21-22)

注意事项

  • getRunningTasks 在API21后被标记为废弃,但API21-22版本仍可正常返回当前应用的任务栈信息,仅访问自身应用任务栈时不需要额外申请权限
  • 仅可用于判断当前应用自身的Activity栈状态,无法获取其他应用的栈信息

完整代码

ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Activity.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> appTasks = activityManager.getAppTasks();
ActivityManager.RecentTaskInfo taskInfo = appTasks.get(0).getTaskInfo();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
    ComponentName topActivity = taskInfo.topActivity;
    if (topActivity.getClassName().contains(MainActivity.class.getSimpleName())) {
        // start activity A
    }
} else {
    // 适配API21-22逻辑
    List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(1);
    if (runningTasks != null && !runningTasks.isEmpty()) {
        ComponentName topActivity = runningTasks.get(0).topActivity;
        if (topActivity != null && topActivity.getClassName().contains(MainActivity.class.getSimpleName())) {
            // start activity A
        }
    }
}

方案2:全局生命周期回调(更稳定,全版本通用)

该方案不依赖系统API版本兼容性,也不需要任何权限,适配所有Android版本,更推荐使用:

实现步骤

  1. 自定义Application类,维护栈顶Activity引用
public class MyApp extends Application {
    private Activity currentTopActivity;

    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityResumed(@NonNull Activity activity) {
                currentTopActivity = activity;
            }

            @Override
            public void onActivityPaused(@NonNull Activity activity) {
                if (currentTopActivity == activity) {
                    currentTopActivity = null;
                }
            }

            // 其他生命周期方法空实现即可
            @Override public void onActivityCreated(@NonNull Activity activity, Bundle savedInstanceState) {}
            @Override public void onActivityStarted(@NonNull Activity activity) {}
            @Override public void onActivityStopped(@NonNull Activity activity) {}
            @Override public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}
            @Override public void onActivityDestroyed(@NonNull Activity activity) {}
        });
    }

    public boolean isMainActivityOnTop() {
        return currentTopActivity instanceof MainActivity;
    }
}
  1. 原来的校验逻辑直接调用该方法即可,不需要区分版本:
if (((MyApp) mContext.getApplicationContext()).isMainActivityOnTop()) {
    // start activity A
}

内容的提问来源于stack exchange,提问作者Anastasiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:33:02