gpt4 book ai didi

android - 如何判断我的 Android 服务是否在前台运行?

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:42 25 4
gpt4 key购买 nike

我想从特定服务的代码中确定该服务是否在前台。我看了看:

ActivityManager.RunningServiceInfo

特别是 RunningServiceInfo.foreground,但文档说,“如果服务要求作为前台进程运行,则设置为 true。”

那么我可以依赖 RunningServiceInfo.foreground 吗?还是有别的办法?

PS:我没有其他问题,我的服务运行良好。这个问题更多是出于好奇。已经浏览了 ASOP 并没有看到任何东西,但也许我错过了什么......

如果您有类似的问题,这可能会有所帮助: How to determine if an Android Service is running in the foreground?

...虽然我发现公认的解决方案不完整。

最佳答案

我唯一能想到的是检查服务的进程重要性是否表明它正在运行前台服务或前台 Activity :

private boolean isForegroundOrForegroundService() {
//Equivalent of RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE on API 23
//On prior versions to API 23, maybe the OS just uses 100 as foreground service importance?
int IMPORTANCE_FOREGROUND_SERVICE = 125;
return findThisProcess().importance <= IMPORTANCE_FOREGROUND_SERVICE;
}

private ActivityManager.RunningAppProcessInfo findThisProcess() {
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo proc : runningAppProcesses)
if (proc.pid == Process.myPid())
return proc;

throw new RuntimeException("Couldn't find this process");
}

要实现这一点,有一些限制条件:

  • 该服务必须是进程中唯一尝试在前台运行的服务,否则您将不知道哪个服务导致进程进入前台模式。
  • 不得有任何 Activity 在同一进程中运行,因为打开 Activity 也会导致进程进入前台模式。
  • 出于与上述相同的原因,除了服务本身之外,没有其他任何东西能够使进程进入前台模式。

因此您可能希望将服务置于其自己的专用进程中。不幸的是,这会使您的应用程序结构变得困难,因为多进程应用程序开发比单进程应用程序开发复杂得多。

请注意,这主要只是理论;我还没有测试过这么多,也没有在任何实际应用程序中使用过它。如果您采用这种方法,请告诉我它的进展情况。

关于android - 如何判断我的 Android 服务是否在前台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18726555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com