Android 三星";“应用程序优化”;此功能在3天后杀死后台应用程序

Android 三星";“应用程序优化”;此功能在3天后杀死后台应用程序,android,android-service,android-alarms,android-wake-lock,samsung-touchwiz,Android,Android Service,Android Alarms,Android Wake Lock,Samsung Touchwiz,我们目前正在开发一款Android应用程序,它是一款健身跟踪器应用程序。它经常在后台运行,在大多数设备上都能正常工作,但在一些三星设备上,应用程序完全消亡的问题一直存在。经过调查,三星的一些设备似乎有一个完全定制的“应用程序优化”功能(),这基本上是一个(非常)原始版本的打盹功能,存在于Android的更高版本中,如果应用程序已经三天没有使用,它基本上只是谋杀应用程序 由于该应用程序或多或少只是做日志记录,并且没有打开活动,这给我们带来了一个大问题,因为许多三星设备都预先启用了该功能。这个问题可

我们目前正在开发一款Android应用程序,它是一款健身跟踪器应用程序。它经常在后台运行,在大多数设备上都能正常工作,但在一些三星设备上,应用程序完全消亡的问题一直存在。经过调查,三星的一些设备似乎有一个完全定制的“应用程序优化”功能(),这基本上是一个(非常)原始版本的打盹功能,存在于Android的更高版本中,如果应用程序已经三天没有使用,它基本上只是谋杀应用程序

由于该应用程序或多或少只是做日志记录,并且没有打开活动,这给我们带来了一个大问题,因为许多三星设备都预先启用了该功能。这个问题可以通过使用前台服务来解决,但这是一个需要不断通知来干扰用户的解决方案的重锤,我们真的不需要应用程序位于前台——我们对Android的正常电源管理很满意

三星应用程序优化功能明确表示,如果应用程序已经三天没有使用,它将“优化”应用程序有人知道三星认为“使用”了什么吗?我能以某种方式触发它吗?

旁白:在我看来,这是一个执行不力的特性,使得Android上的开发更具敌意。除了我们的用例之外,任何messenger应用程序都会崩溃。如果不是因为Facebook Messenger和Whatsapp被硬连线豁免,用户会发疯,因为这会破坏他们的体验

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

是吗?来自Android文档

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

三天的时间似乎属于“长期运行……保证会被杀死”


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

我认为您应该实现一个“广播接收器”,该接收器侦听自定义“意图”,并且该“意图”将由“服务”的“onDestroy()”方法的“服务”广播,因为当“系统”终止“服务”时,该方法将被明确调用。 当“广播接收器”接收到“意图”时,您应该再次启动“服务”。
要区分您停止“服务”还是“系统”停止“服务”,只需使用“共享参考”中存储的一些“布尔值”,然后在“广播接收器”中,您决定是否激活“服务”

是否有原因无法将您的服务添加到“不优化”列表中


看起来用户确实可以做到这一点,所以一定有一些数据库或设置可以控制它

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

我拥有(目前拥有)三星设备,因此我从用户的角度对其工作原理略知一二。技术规格和它在内部的工作方式是一个完全独立的问题,我无法回答

系统可以检测您是否打开应用程序。三星在其应用程序优化中使用了这一点,并将为超过三天未使用的应用程序节省电量。但这是一个糟糕的系统

它忽略了可能对应用程序至关重要的后台流程,即使它是您积极使用的应用程序,如健身跟踪器,也会出现问题。引用应用程序优化列表中的内容:

为节省电池电量,已使用超过3天的应用程序将被指定为省电。指定为省电的应用程序可能不会显示通知

(挪威语的粗略翻译,最初取自运行Android 6的S6)

因此,手动或自动设置(3天不使用)的应用程序可能会在后台进程中出现各种问题。但请记住,用户可以将任何应用程序设置为从不节省电池,并忽略自动设置。因此,考虑到这一点,让我们考虑可能的解决方案。 有一种情况下,你不需要担心应用程序和应用程序优化:当应用程序优化被完全禁用时

撇开这一点不谈,实际上你只能做两件事:

  • 请三星的用户禁用应用程序的电池优化,以防止出现问题

  • 正如@MinaSamy所建议的(在他们现在删除的答案中),SyncAdapter和具有周期性同步。注意,我还没有测试过这个,所以我不知道它是否有效

  • 还有第三种选择,这确实不是一个解决方案,但你可以忽略它,赌应用程序优化被禁用,或者根本不在乎它

    有没有人知道三星认为“使用”了什么?我能以某种方式触发它吗

    据我所知,除非三星增加了一些防止意外开启的保护措施或增加了某种最低活动要求,否则开启就足够了。这似乎是一个“愚蠢”的功能,它运行在硬编码规则上,而不是一个动态系统,该系统实际上检测应用程序的使用情况,并设置与之相关的节能设置。它“很容易启用”,但幸运的是也很容易禁用

    这意味着您无法触发使其保持活动状态的事件(除非SyncAdapter执行此操作)

    为了澄清事实,请从以下方面:


    看起来用户确实可以做到这一点,因此