【问题标题】:How to avoid app standby for background sync app?如何避免后台同步应用的应用待机?
【发布时间】:2017-11-23 09:19:56
【问题描述】:

根据Understanding App Standby 的说法,如果一个应用看起来好像用户不经常使用它,它可以进入待机状态。

我们有日历和联系人同步应用程序,这些应用程序设置一次后(理想情况下)在后台运行,此后无需与用户交互。这些应用程序同步到日历和联系人数据库,因此它们没有用户必须经常打开的 UI。他们只有一个您不经常需要的帐户管理 UI。

因此,上述文章中提到的条件均不适用于我们的应用。特别是:

  • 用户不必为了“使用”而打开它,所以他几乎不启动它
  • 应用未运行前台服务
  • 我们不显示任何通知(除非发生错误)
  • 这肯定不是设备管理应用

所以我的问题是,这样的应用程序(仅在后台运行)避免被系统置于待机状态的预期方式是什么?

我们收到许多来自用户的报告,称该应用停止在最近的三星设备上同步,除非它每 3 天打开一次。将应用程序添加到不受监控的应用程序白名单似乎没有帮助。 我们的日志显示,在 3 天未启动应用程序后,同步适配器不再启动,即使在触发“手动”同步时也是如此。只有手动打开应用才能继续同步。

我们真的必须显示通知才能保持“活跃”吗?

【问题讨论】:

  • 应用待机不是问题。三星有自己的电池管理器应用程序,称为“智能管理器”(至少在 6 和更低版本上,不确定 7+ 上的名称是什么),它会杀死任何在 3 天内未打开的应用程序,除非它在白名单上说经理
  • 另见这篇文章stackoverflow.com/questions/37205106/… 和两个答案
  • 不幸的是,将应用程序添加到 SmartManager 白名单对我们不起作用。尽管如此,3 天后,所有同步请求都被推迟,同步适配器不再被调用。
  • 你怎么知道的?有多个白名单,你确定把它放在智能经理的白名单上吗?
  • 是的,我很确定我已将其添加到智能管理器白名单中。只是为了确保我已经开始另一个测试。我会在 3 天后看到结果。

标签: android android-syncadapter android-appstandby


【解决方案1】:

据我所知,您只能通过使用服务来实现:

https://developer.android.com/reference/android/app/Service.html

http://www.tutorialsface.com/2015/09/simple-android-foreground-service-example/

Manifest 中还有一个“持久”标志,但我认为它不适用于从商店安装的应用程序。

android:持久化 应用程序是否应该始终保持运行——如果应该,则为“true”,否则为“false”。默认值为“假”。应用程序通常不应设置此标志;持久性模式仅适用于某些系统应用程序。

【讨论】:

  • 我们已经实现了SyncAdapter 模式,我们的应用程序的特殊服务会定期被系统调用。问题是,3天后它不再起作用了。我看不出其他服务对此有何帮助。
  • 看起来您的 SyncAdapter 方法可能会提供您正在寻找的功能,但可能无法保证它在 Android 生态系统中的寿命。然而,特定的 Android 服务(jorjSB 提到的)被描述为“服务是一个应用程序组件,可以在后台执行长时间运行的操作”here。也许这更有用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2013-07-11
  • 1970-01-01
  • 2012-04-04
  • 2016-07-05
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多