三星“应用程序优化”function可在3天后杀死后台应用程序

我们目前正在开发一个Android应用程序,这是一个健身追踪器应用程序。 它在后台不断运行,在大多数设备上都能正常运行,但是我们一直在使用某些三星设备完全停止运行。 经过一番调查,似乎一些三星设备有一个完全自定义的“应用程序优化”function( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html ),其中基本上是一个(非常)原始版本的瞌睡function,存在于后来的Android版本,基本上只是谋杀应用程序,如果他们没有使用三天。

由于这个应用程序或多或less只是在进行日志logging,并没有打开这个活动,这对我们来说是一个很大的问题,因为这个function已经在很多三星设备上预先启用了。 这个问题是通过使用前台服务解决的,但这是一个解决scheme的大锤,需要用户持续的通知来干扰用户,而且我们确实不需要应用程序在前台 – 我们正常的电源Android的pipe理。

三星应用程序优化function明确指出,如果三天内未使用应用程序,它将“优化”应用程序。 有没有人有三星认为是“使用”的见解,我可以以某种方式触发?

副作用:在我看来,这是一个糟糕的实现function,使得Android上的开发更具敌意。 除了我们的用例之外,任何Messenger应用程序都会中断。 如果不是因为Facebook Messenger和Whatsapp硬连接到应用程序免费的事实,用户会发疯,因为它会打破他们的经验。

    我同意你们所有的三星应用优化是一个可怕的特点。 打瞌睡好多了。


    现在我的答案是:

    我拥有一个S6边缘,所以我知道它是如何工作的。

    系统可以检测你是否打开一个应用程序。 三星在他们的应用程序优化中使用它,并将在三天内没有使用的应用程序节省电力。 这是一个可怕的做法。

    它忽略了可能对应用程序至关重要的后台进程,即使它是您正在使用的应用程序,例如健身追踪器,也会有问题。 引用app优化列表中的内容:

    “为了节省电池电量,未使用时间超过3天的应用程序将被指定为节省电量,指定节省电量的应用程序可能不会显示通知”(这可能不是完全正确的,每个单词都被翻译过从我的设备运行挪威作为语言)

    因此,应用程序:

    • 已经手动设置以节省电力
    • 自动设置为省电(3天不使用)

    将提供与后台进程等问题。

    但:

    用户可以设置任何应用程序永远不会节省电池,即使在3天后。 所以考虑到这一点,让我们考虑一下

    解决scheme

    有一种情况下,您不必担心应用程序和应用程序优化:

    当应用程序优化被禁用。

    放眼那边,你只能做两件事:

    1. 请三星的用户closures应用程序的电池优化,以防止问题

    2. 正如@MinaSamy所build议的,SyncAdapter和定期同步。 不知道它是否有效,因为我自己没有testing过

    当然还有第三个选项不能真正被视为解决scheme:

    1. 希望应用程序优化被禁用或忽略问题

    现在,

    有没有人有三星认为是“使用”的见解,我可以以某种方式触发?

    正如我上面提到的,used = opened。 意思是如果应用程序打开,3天的倒计时将重新开始。 我不确定三星是否考虑过意外开启(按下图标并立即按下主页button)

    意思就我所知,你不能触发一个事件,将它保持活着(除非SyncAdapter做到这一点))

    为了说清事实,从@尼尔的回答:

    它看起来好像用户可以这样做,所以必须有一些数据库或设置在某个地方来控制它。

    用户可以完全控制该function,并可以执行以下四个选项之一:

    • 始终优化< – 对于每个应用程序
    • 自动优化< – 对于每个应用程序
    • 永远不要优化< – 为每个应用程序
    • 禁用应用程序优化< – 防止任何优化

    是否有一个原因,您不能将您的服务添加到“不优化”列表?

    它看起来好像用户可以这样做,所以必须有一些数据库或设置在某个地方来控制它。

    或者,如果您检测到要在其中一台设备上进行安装,请打开优化活动页面,并显示消息“不要优化我们!”。

    在我看来,你应该实现一个“广播接收器”,听从“服务”的'onDestroy()'方法的'服务'广播的定制'意图'和'意图',因为当'系统'杀死'Service'这个方法肯定会被调用。 而当“广播接收者”收到“意图”时,应该再次启动“服务”。 为了区分停止服务或停止服务的系统,只需使用“SharedPreferences”中存储的一些“布尔值”,然后在“广播接收器”中决定是否激活“服务”

    我们用Android的正常电源pipe理很好

    你是? 从Android文档

    但是,由于用户并不直接意识到后台服务,所以在这种情况下,它被认为是一个有效的候选人,你应该为此做好准备。 特别是,长期服务将越来越有可能被杀死,并且如果它们保持足够长的时间,则将被保证被杀死(并在适当时重新启动)。

    似乎有三天的时间会在“长期运行……保证被杀死”之下。

    如果问题不是您的服务被终止,而是没有重新启动,您可以使用AlarmManager定期检查服务的状态,并在必要时重新启动。