Android 服务无限期运行

标签 android service sticky

我注意到像 Skype 这样的应用程序使用的服务基本上是 24x7 运行,根本不会被终止。您甚至不能使用任务 killer 手动杀死它(您可以通过运行服务和杀死服务来杀死它们)。这是如何实现的?

我发现在 Android 2.3 中,我的服务会在运行一段时间后被终止。即使我使用 START_STICKY 启动服务,也永远不会调用 onDestroy()。然而,这在我的 2.1 设备上运行良好,即服务不会被终止。

谢谢

最佳答案

How is this implemented?

根据显示 Notification 图标的 Skype 屏幕截图,他们很可能正在使用 startForeground()

I find that in Android 2.3, my service gets killed after running for sometime.

这是完全正常的。

首先,大多数 Android 应用程序并不真正需要“基本上 24x7 运行”的服务。用户不喜欢此类服务,这就是操作系统中存在任务 killer 和正在运行的服务屏幕以及自动终止逻辑的原因。服务应该“24x7”运行的唯一原因是每微秒都在交付值(value)。 VOIP 客户端,如 Skype,将在每一微秒内提供值(value),因为它们正在等待来电。大多数 Android 应用程序不符合此标准。

如果您的服务持续运行,但运行时间由用户控制(例如,音乐播放器),startForeground() 是一个很好的解决方案。

否则,我宁愿你想办法去掉“基本24x7运行”的服务,改用AlarmManager用户可控的轮询系统,这样你的服务一般不在内存中除非它正在交付值(value)。

关于Android 服务无限期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581994/

相关文章:

javascript - AngularJS:数据绑定(bind)和点表示法

python - 如何在 Windows 中用 python 创建服务?

html - 强制我的页脚在屏幕底部,即使内容不够大(不粘)

android - 检测用户是否完成 ACTION_SEND Intent 而不是按回?

android - 切换到 HEREMap premium SDK 后性能下降

android - 在 Android 中更快地对文档文件数组进行排序

android - Facebook Android SDK 4.0.0 没有获取个人资料信息

android - 在android中无限运行服务

css - (又一个)Flexbox 和位置 : Sticky

html - 带液体容器的粘性页脚