AOSP Android中的永久后台服务?

时间:2019-07-19 13:04:09

标签: android android-source

我正在开发一个Android应用程序,该应用程序将嵌入到我们客户拥有的非移动设备中,并由我们客户的客户使用。我的老板正在为该机器准备第二个应用程序,该应用程序在后台运行,并通过categorical_list = list(np.where(df.dtypes == 'category')[0])定期将有关设备的数据发送到后端。我已经聘用了this method,尽管我知道它并不完美,因为Android倾向于随意和在未指定的时间(即当它确定该服务已过时或系统需要更多内存时)终止后台服务。 / p>

也就是说,我们正在运行Android(v5.1.1)的开源版本。我想知道我的操作系统团队是否有可用的选项,这些选项对于那些构建适用于Google Android风格的应用程序不可用,是否可以通过某些方式删除那些已关闭的典型管理机制或自动重启应用程序? / p>

2 个答案:

答案 0 :(得分:4)

我认为您有3种选择:

  1. 修改Android OOMKiller以排除您的应用。不推荐这个。
  2. 创建由SystemServer启动的Java系统服务
  3. 创建一个本机C“应用程序”(二进制),该应用程序在init.rc scripts.(CommonsWare注释建议的守护程序)之一中启动。如果您需要 ,则可以以root用户身份运行。

答案 1 :(得分:4)

在清单中的<application>标记上设置android:persistent="true"

文档说:

  

应用程序是否应始终保持运行-如果应该,则始终为“ true”,否则应始终为“ false”。默认值为“ false”。应用程序通常不应设置该标志;持久模式仅适用于某些系统应用程序。

为此,您的APK必须安装在系统分区上。它可能还需要位于priv-app目录中,或使用与系统相同的密钥进行签名(其中有些是这样做的;我不记得这种特殊情况)。

请注意,您的Application.onCreate()将自动启动;您的Service不会自动启动。不是您需要它;而是您需要它。当您persistent时,Android系统不会(通常)终止您的进程,因此您可以按照需要执行正常的线程。

最后,请确保您没有泄漏内存。持久性应用会在很晚之后(如果有的话..?)被LMK杀死,因此可能会对设备的性能或稳定性产生不利影响。