android - 三星 "App optimisation"功能在 3 天后杀死后台应用程序

标签 android android-service android-alarms android-wake-lock samsung-touchwiz

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

由于这个应用程序或多或少只做日志记录,并没有打开 Activity ,它给我们带来了一个大问题,因为这个功能在许多三星设备上都是预先启用的。这个问题是通过使用前台服务来解决的,但这是一个解决方案的大锤,需要通过不断的通知来打扰用户,我们真的不需要应用程序处于前台 - 我们可以使用正常的电源安卓管理。

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

Side-rant:在我看来,这是一个实现得很糟糕的功能,它使 Android 上的开发更加充满敌意。除了我们的用例之外,它还会破坏任何信使应用程序。如果不是因为 Facebook Messenger 和 Whatsapp 天生就可以豁免该应用程序,那么用户会发疯,因为这会破坏他们的体验。

最佳答案

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

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

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

"To save battery power, apps that haven't been used for more than 3 days will be designated to save power. Apps designated to save power may not show notifications"

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

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

在一种情况下您无需担心应用和应用优化:应用优化完全禁用时。

除此之外,您实际上只能做两件事:

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

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

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

Does anyone have insight in what Samsung considers to be "used" and can I somehow trigger that?

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

意味着你不能触发一个让它保持 Activity 的事件(除非 SyncAdapter 能做到这一点)

为了澄清事实,来自 @Neil's answer :

It does seem like the user can do this, so there must be some database or setting somewhere that controls it.

有点。总共有四个设置,其中三个是特定于应用程序的,它存储在数据库中(或其他形式的数据存储)。这四个设置虽然非常浅,但可以用来改变应用优化的行为:

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

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

There's also a website列出每个品牌绕过优化的方法。三星的入口或多或少就是我所说的:告诉用户手动禁用优化。没有开发者解决方案。

关于android - 三星 "App optimisation"功能在 3 天后杀死后台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36850109/

相关文章:

c# - 如何在没有多个 if 语句的情况下检查条件?

android - 在 Android 模拟器上安装 Open GApps

java - 抽屉导航 onNavigationDrawerItemSelected 在 MainActivity onCreate 之前调用?

java - WindowManager-Bad token exception only on Android 6

android - 在服务中安排重复任务

android - 如何通过 Android 中的 ActivityOptions 在 finish() 上设置动画?

java - 从Android中的服务获取Activity.Class

android - 服务停止时 Widget 的 PendingIntent 丢失

android - 有多个闹钟时取消单个闹钟

java - 我可以在 Android 中设置 AlarmManager 的结束时间吗?