android - AOSP Android 中的永久后台服务?
问题描述
我正在开发一个 Android 应用程序,该应用程序将嵌入到我们客户拥有的非移动设备上,并由我们客户的客户使用。我的老板正在为在后台运行的机器设想第二个应用程序,并通过Service
. 我已经使用了这种方法,尽管我知道它并不完美,因为 Android 很容易在未指定的时间随意杀死后台服务,即当它决定服务已过时或系统需要更多内存时。
也就是说,我们正在运行 Android 的开源版本 (v5.1.1)。我想知道我的操作系统团队是否有任何选项不适用于那些为 Google Android 风格构建应用程序的人,是否有某种方法可以删除那些典型的内务管理机制或自动重启已关闭的应用程序?
解决方案
在清单中android:persistent="true"
的标签上设置。<application>
文档说:
应用程序是否应该始终保持运行——如果应该,则为“true”,否则为“false”。默认值为“假”。应用程序通常不应设置此标志;持久性模式仅适用于某些系统应用程序。
为此,您的 APK 需要安装在系统分区上。它可能还需要在priv-app
目录中或使用与系统相同的密钥进行签名(其中一些是这样做的;我不记得这种特定情况)。
请注意,您的Application.onCreate()
将自动启动;你的Service
将不会自动启动。不是你需要它;当你是时persistent
,Android系统不会(通常)杀死你的进程,所以你可以运行正常的线程来做你需要的事情。
最后,请确保您没有泄漏内存。持久性应用程序很晚才被 LMK 杀死(如果有的话..?),因此它可能会对您设备的性能或稳定性产生不利影响。
推荐阅读
- swift - Firebase 快照未显示数据
- c# - 我可以在设计器中使用我的资源文件中的字符串更新我的表单吗?
- sql - 如何将表连接到从查询创建的表
- python - 在单元测试中退出 tf.Session() 时重置默认图
- javascript - d3.js 中的进入和退出是什么?
- firebase-realtime-database - Swift/Xcode:如何在应用程序处于后台时使 Firebase 观察者函数动作?
- mysql - 更新 CHARACTER SET 后 MySQL 表不存在
- java - 为什么使用 AudioTrack 库无法在智能手机的音频端口生成直流电压?
- text - MariaDB 中的 MEDIUMTEXT 和 MEDIUMBLOB 有什么区别?
- reactjs - 理解 React refs - 为什么我的引用在这里为空?