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

我们目前正在开发一款适用于健身追踪应用的Android应用。 它在后台不断运行,并且在大多数设备上运行良好,但是我们一直遇到应用程序在某些三星设备上完全死机的问题。 经过一番调查,似乎有些三星设备有一个完全自定义的“应用优化”function( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html ),基本上是Dozefunction的(非常)原始版本,存在于Android的更高版本中,如果它们三天没有被使用,它们基本上只是谋杀应用程序。

由于此应用程序或多或少仅执行日志记录,并且未打开活动,因此对我们来说存在很大问题,因为此function已在许多三星设备上预先启用。 这个问题通过使用前台服务来解决,但这是一个解决方案的大锤,需要通过持续通知来扰乱用户,而我们真的不需要应用程序处于前台 – 我们对正常的电源很好管理Android。

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

侧面咆哮:在我看来,这是一个糟糕的实现function,使Android上的开发更具敌意。 除了我们的用例,它将会破坏任何信使应用程序。 如果不是因为Facebook Messenger和Whatsapp很难被豁免应用,那么用户就会疯狂,因为这会破坏他们的体验。

    我同意你的看法,三星应用优化是一个可怕的function。 打瞌睡好多了。


    现在我的回答:

    我拥有S6优势,所以我对它的工作方式了解不多。

    系统可以检测您是否打开了应用程序。 三星在他们的应用程序优化中使用它,并将节省超过三天未使用的应用程序的function。 但这是一种可怕的做法。

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

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

    因此,应用程序:

    • 已手动设置以节省电量
    • 自动设置为省电(3天未使用)

    会给出后台进程等问题。

    但:

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

    解决方案

    有一种情况您无需担心应用和应用优化:

    禁用应用优化时。

    放在一边,你真的只能做两件事:

    1. 让三星的用户在您的应用上禁用电池优化以防止出现问题

    2. 正如@MinaSamy所建议的那样,SyncAdapter并定期进行同步。 不确定它是否有效,因为我自己没有测试过

    当然还有第三个选项无法真正被视为解决方案:

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

    现在,

    有没有人了解三星认为“被使用”的东西,我能以某种方式触发吗?

    如上所述,used =打开。 这意味着如果应用程序被打开,3天的倒计时将重新开始。 我不确定三星是否考虑过诸如意外打开之类的事情(按下图标并立即按下主页按钮)

    据我所知,你不能触发一个让它保持活着的事件(除非SyncAdapter能够解决这个问题))

    并且从@Neil的答案中清楚地说明事实:

    用户似乎可以这样做,所以必须有一些数据库或设置控制它的地方。

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

    • 始终优化< - 对于每个应用程序
    • 自动优化< - 适用于每个应用
    • 从不优化< - 对于每个应用程序
    • 禁用应用优化< - 防止任何优化

    您是否有理由无法将服务添加到“不优化”列表中?

    用户似乎可以这样做,所以必须有一些数据库或设置控制它的地方。

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

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

    我们对Android的正常电源管理很好

    你是? 来自Android文档

    但是,由于用户没有直接了解后台服务,因此在该状态下它被认为是有效的候选者,您应该为此做好准备。 特别是,长期运行的服务将越来越可能被杀死,并且如果它们保持足够长的时间,则可以保证被杀死(并且如果适当的话,重新启动)。

    三天似乎会陷入“长期奔跑……保证被杀”。

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