android,如何通过packagename判断应用程序是否处于killed状态



拥有一个运行服务以监听FCM通知的android应用程序。

所谓killed状态的应用程序,我的意思是从最近的活动应用程序列表中滑出应用程序,或通过点击home按钮关闭应用程序,或者反向按压应用程序直到应用程序关闭(在所有活动都从后台弹出后(,或者由于任何原因操作系统杀死了应用程序。

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

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

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,并且与该应用程序在后台(被其他应用程序覆盖(相同。

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

在您写的一条评论中:

我想确定:应用程序是否应该重新启动(应用程序被杀(,还是只是把应用程序放在前面?

如果使用";启动CCD_ 5";,这将为你处理所有这些。如果应用程序已经在运行,它只会在应用程序处于的任何状态下将其带到前台。如果应用程序没有运行,它将重新启动应用程序。

为了得到一个";启动CCD_ 6";,你可以使用PackageManager.getLaunchIntentForPackage()

最新更新