如何检查Android后台服务线程是不是正在运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查Android后台服务线程是不是正在运行相关的知识,希望对你有一定的参考价值。

public static ComponentName isServiceExisted(Context context,String packageName)
ActivityManager activityManager = (ActivityManager) context.getSystemService("activity");
List serviceList = activityManager.getRunningServices(Integer.MAX_VALUE);
for (ActivityManager.RunningServiceInfo runningServiceInfo : serviceList)
ComponentName serviceName = runningServiceInfo.service;//将android后台正在运行的服务线程赋值给serviceName
if ((serviceName.getPackageName().equals(packageName))&& (serviceName.getClassName().equals(packageName+ ".business.RemoteSSOService"))) //如果serviceName.getPackageName()等于(packageName)且 serviceName.getClassName()等于packageName加".business.RemoteSSOService"时说明有Android后台服务线程正在运行;
return serviceName; //有Android后台服务线程正在运行返回服务名称;


return null; //无Android后台服务线程正在运行返回空值;
参考技术A Android系统提供了一个函数ActivityManager.getRunningServices可以列出当前正在运行的后台服务线程

private boolean isServiceRunning()
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
if ("com.example.MyService".equals(service.service.getClassName()))
return true;


return false;


这个方法是可靠的,因为这是由Android系统提供的服务查询办法。
所以以来于OnDestroy或者OnXXX方法,甚或是Binders以及静态变量的方法都是不可靠的,因为作为一个开发者,你永远不知道Android系统什么时候会杀掉你的进程来释放内存,那些回调函数很可能根本没机会被调用。

另外,关于如果希望手工检查所有后台服务的运行状态,见如何观察和控制正在运行的Android后台服务.本回答被提问者和网友采纳
参考技术B 可以看看内存运行里有没有,找不到就是隐藏了,安卓系统一定是在运行的,否则手机就运行不了软件,打不了电话了,你可以看看手机使用时间,安卓系统使用的时间及电量一定是最高的。 参考技术C 用腾讯手机管家检测 参考技术D 使用手机管家跟进就可以知道了

快速的后台工作

【中文标题】快速的后台工作【英文标题】:Swift background work 【发布时间】:2018-05-29 12:53:45 【问题描述】:

我是 iOS 开发新手,我在当前项目中使用 Swift。 我正在尝试实现我在 Android 中所做的类似事情。我正在尝试在应用程序关闭/最小化时运行后台服务,该服务将每 2 秒执行一次,以让用户知道应用程序仍在后台运行并检查服务器的状态。

我怎样才能做到这一点?我试过使用“后台获取”方法,但它不是每 2 秒执行一次。

如果重要,后台服务将运行不超过 5 分钟。

【问题讨论】:

【参考方案1】:

不,你不能那样做。您可以做的是,在 applicationDidEnterBackground 中调用一个服务,让您的服务器知道您的应用程序处于后台或被杀死(您将获得非常少的时间来执行此操作,大约 3-5 秒.).

【讨论】:

【参考方案2】:

您所描述的 Android 应用可能会过早耗尽设备的电池电量。这就是为什么 Apple 将后台执行限制为一组明确定义的任务的简单原因:

在后台向用户播放有声内容的应用,例如音乐播放器应用 在后台录制音频内容的应用程序 让用户随时了解其位置的应用,例如导航应用 支持互联网协议语音 (VoIP) 的应用 需要定期下载和处理新内容的应用 从外部附件接收定期更新的应用

此列表摘自苹果官方对后台任务的描述:Background Execution。

【讨论】:

以上是关于如何检查Android后台服务线程是不是正在运行的主要内容,如果未能解决你的问题,请参考以下文章

检查应用程序是不是正在运行(后台或前台)Android

在 android 服务的单独线程中运行位置更新

总是在后台运行线程/进程?

如何检查正在运行的进程是不是是后台进程? [关闭]

如何检查由单独 Android 应用程序中的服务启动的 Android 应用程序是不是已完成加载?

Android:如何在所有后台线程完成后启用按钮