Android 获取最上面的Activity

作为一名经验丰富的开发者,我将教会你如何获取Android中最上面的Activity。下面是整个流程的步骤:

步骤 操作
1 获取Activity栈的实例
2 获取栈顶的Activity

下面是每个步骤需要做的事情以及相应的代码。

步骤1:获取Activity栈的实例

获取Activity栈的实例是获取最上面的Activity的第一步。Android提供了一个类叫作ActivityManager,我们可以使用它来获取Activity栈的实例。以下是相应的代码:

// 获取ActivityManager实例
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

上述代码中,我们使用getSystemService方法获取了系统服务的实例,参数Context.ACTIVITY_SERVICE表示获取Activity服务。由于ActivityManager是一个系统服务,所以需要通过强制类型转换将其转换为ActivityManager类型的实例。

步骤2:获取栈顶的Activity

获取Activity栈的实例之后,我们需要获取栈顶的Activity。ActivityManager提供了一个方法叫作getRunningTasks,可以获取当前正在运行的任务栈。以下是相应的代码:

// 获取任务栈
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    // Android 10及以上版本
    List<ActivityManager.RunningTaskInfo> taskInfos = activityManager.getRunningTasks(1);
    if (taskInfos != null && !taskInfos.isEmpty()) {
        ComponentName componentName = taskInfos.get(0).topActivity;
        // 获取栈顶的Activity
        String topActivityName = componentName.getClassName();
        // 输出栈顶的Activity名字
        Log.d("Top Activity", topActivityName);
    }
} else {
    // Android 9及以下版本
    List<ActivityManager.RunningAppProcessInfo> processInfos = activityManager.getRunningAppProcesses();
    if (processInfos != null && !processInfos.isEmpty()) {
        ActivityManager.RunningAppProcessInfo processInfo = processInfos.get(0);
        // 获取栈顶的Activity
        String topActivityName = processInfo.processName;
        // 输出栈顶的Activity名字
        Log.d("Top Activity", topActivityName);
    }
}

上述代码中,我们首先判断Android的版本,因为从Android 10开始,getRunningTasks方法已被弃用,需要使用getRunningAppProcesses方法。在Android 10及以上版本中,我们使用getRunningTasks方法获取任务栈,然后从中获取栈顶的Activity。在Android 9及以下版本中,我们使用getRunningAppProcesses方法获取进程列表,然后从中获取栈顶的Activity。

最后,我们可以将获取到的栈顶的Activity名字输出到Log中,方便调试和查看。

现在你已经知道如何获取Android中最上面的Activity了。希望这篇文章能帮助到你,祝你在开发Android应用时取得成功!