android,如何通过packagename判断app是否处于kill状态

android, how to tell whether the app is in killed state by packagename

有一个 android 有服务的应用 运行 收听 FCM 通知。

应用程序处于 killed 状态我的意思是当从最近的活跃应用程序列表中滑出应用程序,或通过点击 home 按钮关闭应用程序,或在应用程序上后退直到应用程序关闭(在所有活动都从后台弹出后),或出于任何原因 OS 终止了应用程序。

有一些函数可以与应用程序的包名一起使用来获取一些应用程序的状态信息。

这个可以帮助判断应用程序在后台,但可能不会被杀死。

public class ArchLifecycleApp extends Application implements LifecycleObserver {

    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        //App in background
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        // App in foreground
    }
}

这个可以告诉应用程序仅在 FG 中:

   boolean isAppInFG(Context appContext, String packageName) {
        boolean appInFG = false;

        ActivityManager activityManager = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        if (appProcesses != null) {
            
            for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
                if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
                        appProcess.processName.equals(packageName)) {
                    appInFG = true;
                    break;
                }
            }
        }

        return appInFG;
    }

按下home按钮,或从最近应用列表中滑出应用后,appProcess.importance始终为300,与应用处于后台(被其他应用覆盖)相同.

问题:在这种情况下,有没有办法告诉应用程序已被杀死(不仅仅是在后台)?

在您写的评论中:

I want to determine: should the app go through a fresh re-launch (app is killed) or just bring the app to front?

如果您使用“启动 Intent”,它将为您处理所有这些。如果应用程序已经 运行,它只会将应用程序带到前台,无论它处于什么状态。如果应用程序不是 运行,它将重新启动应用程序。

要获得“启动 Intent”,您可以使用 PackageManager.getLaunchIntentForPackage()