代码之家  ›  专栏  ›  技术社区  ›  Andrej

总是在后台运行android上的root服务

  •  0
  • Andrej  · 技术社区  · 7 年前

    根据 this thread 之后 安卓奥利奥 , 谷歌 引入了一些背景限制,因此无法运行 服务 始终在后台,不显示用户通知。

    是否可以使用root权限实现这一点?

    编辑:我看到人们投票结束我的问题,因为它看起来似乎太宽泛了,但我正在竞选 天堂 ,如果可能的话,我想让我的应用程序作为系统服务运行,我认为这在不修改源代码的情况下是可行的。例如,在安装操作系统时,我可以使用flash Gapp,但这是可选的,它们似乎具有我所说的功能。我也不希望你为我做所有的研究,我愿意接受为我指明正确方向的答案。

    0 回复  |  直到 7 年前
        1
  •  4
  •   Martin Zeitler    7 年前

    确实有一个未记录的shell命令,可以通过将包添加到全局 location_background_throttle_package_whitelist (我还没有测试过):

    settings put global location_background_throttle_package_whitelist "package1,package2,package3"
    

    ^这是给 location 服务,但可能还有更多 background_throttle 可用设置:

    settings list global | grep background_throttle
    

    资料来源: XDA Developers .


    也在 source code 我只找到了以下设置:

    Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST
    Settings.Global.LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS
    Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS
    

    这个 documentation 清楚地知道某些服务正在被添加到 短暂的 白名单。为了找出这些服务的白名单,我们需要进一步挖掘。这些后台服务限制实际上在 Context.java ...而用 @UnsupportedAppUsage 只有系统才使用。


    火场 WorkManager 仍然是可用的最佳选项,还是潜在的 JobIntentService ,仍将作为常规后台服务运行<安卓 O .闪动的安卓 N 或是血统 14.1 这将是一个特定的解决办法,几乎没有被考虑。

    假设 root 权限将提供超级权限可能是一种误解。允许不受限制的位置访问仍然非常有限,甚至谷歌自己的服务也仅限于此 暂时 白名单。唯一被排除在这些后台执行限制之外的服务是Linux system services ,用 C++ (它们在JVM之外运行)——而这是一个非常不同于Android后台服务的东西,用 Java (它们都在JVM中运行,并且都扩展了相同的限制 Service 类)。

        2
  •  1
  •   Greg Moens    7 年前

    我发现一种非常有效的技术是使用绑定服务。无需用户通知,而且由于您从未调用startService(),它可以在Oreo和更高版本上运行。也不需要根。绑定到将始终运行的服务的好地方是从应用程序对象的onCreate()方法。无论你的应用何时运行,服务都会运行。