AOSP Android中的永久后台服务?

AOSP Android中的永久后台服务?,android,android-source,Android,Android Source,我正在开发一个Android应用程序,它将被嵌入到我们客户拥有的非移动设备上,并被我们客户的客户使用。我的老板正在设想为在后台运行的机器开发第二个应用程序,并通过服务定期向后端发送有关设备的数据。虽然我知道这是不完美的,但我已经雇佣了,因为Android很容易在不确定的时间随意终止后台服务,即当它决定服务过时或系统需要更多内存时 也就是说,我们正在运行Android的开源版本(v5.1.1)。我想知道我的操作系统团队是否有任何选项不适用于为谷歌Android风格构建应用程序,是否有一些方法可以删

我正在开发一个Android应用程序,它将被嵌入到我们客户拥有的非移动设备上,并被我们客户的客户使用。我的老板正在设想为在后台运行的机器开发第二个应用程序,并通过
服务定期向后端发送有关设备的数据。虽然我知道这是不完美的,但我已经雇佣了,因为Android很容易在不确定的时间随意终止后台服务,即当它决定服务过时或系统需要更多内存时


也就是说,我们正在运行Android的开源版本(v5.1.1)。我想知道我的操作系统团队是否有任何选项不适用于为谷歌Android风格构建应用程序,是否有一些方法可以删除那些典型的内部管理机制或自动重启已关闭的应用程序?

我认为您有3个选项:

  • 修改Android OOMKiller以排除您的应用程序。我不推荐这个
  • 创建一个Java系统服务,该服务由
  • 创建一个本机C“app”(二进制),它在其中一个(Commonware注释建议的守护进程)中启动。这样做的好处是,如果需要,可以作为root运行
  • 在清单中的
    标记上设置

    文件说:

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

    要使其工作,您的APK需要安装在系统分区上。它可能还需要在
    priv-app
    dir中,或者使用与系统相同的密钥进行签名(其中一些是这样的;我不记得在这种特定情况下)

    请注意,您的
    应用程序.onCreate()
    将自动启动;您的
    服务将不会自动启动。并不是说你需要它;当你是持久的时,Android系统不会(通常)终止你的进程,所以你可以运行正常的线程来做你需要做的事情


    最后,确保您没有泄漏内存。LMK很晚(如果有…?)就会终止持久性应用程序,因此可能会对设备的性能或稳定性产生不利影响。

    创建一个标准Linux守护程序,并将其作为引导过程的一部分启动。Android的内存不足杀手只会终止标准Android SDK应用程序的进程。设置
    Android:persistent=“true”
    是否会导致服务重新启动,即使服务本身调用
    stopSelf()
    ?否,
    persistent
    仅适用于您的进程。将调用您的
    应用程序.onCreate()
    ,但调用
    stopSelf()
    的服务不会自动重新启动。