Android 判断 Activity 是否启动

在 Android 开发中,有时候我们需要判断某个特定的 Activity 是否已经启动。这种情况通常出现在我们需要根据 Activity 的启动状态来执行不同的逻辑操作,或者需要检查是否有某个特定的 Activity 在前台运行。本文将介绍如何通过代码来判断 Activity 是否已经启动,并提供相应的代码示例。

判断 Activity 是否启动的方法

方法一:通过 ActivityManager 检查正在运行的 Activity

Android 提供了 ActivityManager 类,它可以获取系统中正在运行的 Activity 列表。我们可以通过检查 ActivityManager 返回的列表,来判断某个特定的 Activity 是否在列表中存在。

以下是通过 ActivityManager 判断 Activity 是否启动的示例代码:

import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;

public class ActivityUtils {

    public static boolean isActivityRunning(Context context, Class<?> activityClass) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (activityManager != null) {
            List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
            for (ActivityManager.RunningTaskInfo taskInfo : runningTasks) {
                ComponentName componentName = taskInfo.topActivity;
                if (activityClass.getName().equals(componentName.getClassName())) {
                    return true;
                }
            }
        }
        return false;
    }
}

方法二:通过 IntentFilter 检查 Activity 是否在前台运行

另一种方法是通过 IntentFilter 监听当前活动的状态,并根据状态来判断 Activity 是否在前台运行。我们可以在 Activity 的 onResume() 和 onPause() 方法中设置一个标志位,通过判断这个标志位的值来确定 Activity 的状态。

以下是通过 IntentFilter 判断 Activity 是否启动的示例代码:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;

public class ActivityUtils {

    private static boolean isActivityRunning = false;

    public static void registerActivityStatus(Context context) {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.ACTIVITY_RESUMED");
        intentFilter.addAction("android.intent.action.ACTIVITY_PAUSED");

        LocalBroadcastManager.getInstance(context).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals("android.intent.action.ACTIVITY_RESUMED")) {
                    isActivityRunning = true;
                } else if (intent.getAction().equals("android.intent.action.ACTIVITY_PAUSED")) {
                    isActivityRunning = false;
                }
            }
        }, intentFilter);
    }

    public static boolean isActivityRunning() {
        return isActivityRunning;
    }
}

使用示例

假设我们需要判断 MainActivity 是否已经启动,我们可以在需要判断的地方调用 isActivityRunning() 方法来获取判断结果。

if (ActivityUtils.isActivityRunning(this, MainActivity.class)) {
    // MainActivity 已经启动
} else {
    // MainActivity 未启动
}

流程图

下面是判断 Activity 是否启动的流程图:

flowchart TD
    A[开始]
    B[通过 ActivityManager 获取正在运行的 Activity 列表]
    C[遍历列表,判断目标 Activity 是否存在]
    D[判断结果为已启动]
    E[判断结果为未启动]
    A --> B --> C --> D
    C --> E

类图

根据以上代码示例,我们可以得到以下类图:

classDiagram
    class ActivityUtils {
        +isActivityRunning(context: Context, activityClass: Class): boolean
    }

小结

通过本文的介绍,我们了解了如何通过代码来判断 Activity 是否已经启动。我们可以通过 ActivityManager 类或者监听 Activity 的状态来实现这一功能。在实际开发中,根据具体的需求选择合适的方法,并根据判断结果执行相应的逻辑操作。

希望本文对你有所帮助,谢谢阅读!