三星"应用程序优化"功能在3天后杀死后台应用程序

Mat*_*son 33 android android-service android-alarms android-wake-lock samsung-touchwiz

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

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

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

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

Zoe*_*Zoe 8

我拥有(现在拥有)三星设备,所以我从用户的角度了解它的工作原理.技术规范及其在内部的工作方式是一个完全独立的问题,我无法回答.

系统可以检测您是否打开了应用程序.三星在他们的应用程序优化中使用它,并将节省超过三天未使用的应用程序的功能.虽然这是一个糟糕的系统.

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

"为节省电池电量,将指定未使用超过3天的应用程序以节省电量.指定用于节省电量的应用程序可能不会显示通知"

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

因此,手动或自动设置的应用程序(3天不使用)可能会给后台进程带来各种问题.但请记住,用户可以将任何应用程序设置为永不节省电池,并忽略自动设置.因此,考虑到这一点,让我们考虑可能的解决方案.

有一种情况您无需担心应用和应用优化:完全禁用应用优化时.

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

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

  2. 正如@MinaSamy建议的(在他们现在删除的答案中),SyncAdapter并定期同步.请注意,我没有测试过这个,所以我不知道它是否有效.

而且还有第三个选项,它实际上不是一个解决方案,但你可以忽略它并且赌博应用程序优化被禁用,或者根本不关心它.

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

据我所知,除非三星增加一些防止意外开启的保障或增加某种最低活动要求,否则开放就足够了.它似乎是一个"愚蠢"的功能,它运行在硬编码规则上,而不是动态系统,它实际上检测应用程序使用并设置相对于此的节电.它"易于启用",但幸运的是很容易禁用.

意思是你不能触发一个让它保持活动的事件(除非SyncAdapter能够解决这个问题)

并且要清楚地说明事实,来自@ Neil的回答:

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

有点儿.总共有四个设置,其中三个是特定于应用程序的,并且存储在数据库(或某种其他形式的数据存储)中.可以使用这四种设置(尽管非常浅)来改变应用优化的行为:

  • 始终优化
  • 自动优化
  • 从不优化
  • 禁用应用优化

前三个选项基于每个应用程序,这意味着每个应用程序可以有单独的设置.禁用应用优化正是您所期望的:它会禁用所有应用的整个功能.如果它被完全禁用,则不会优化任何内容.


Enr*_*ico -3

我们对 Android 的正常电源管理没问题

你是?来自 Android 文档

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

三天好像就属于“长期运行……保证被杀”了。

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