【问题标题】:Widget stops updating after closing app关闭应用程序后小部件停止更新
【发布时间】:2018-06-10 14:11:12
【问题描述】:

AppWidgetProvider 类中,我有一个简单的CountDownTimer 正在运行。

object : CountDownTimer(30000, 1000) {

    override fun onTick(millisUntilFinished: Long) {
        val appWidgetManager = AppWidgetManager.getInstance(context)
        val views = RemoteViews(context.packageName,R.layout.view_group)
        views.setTextViewText(R.id.m_text_view,"seconds remaining: " + millisUntilFinished / 1000)
        appWidgetManager.updateAppWidget(appWidgetIds[0], views)
    }

    override fun onFinish() {
        // Do nothing
    }
}.start()

这会按预期更新相应的小部件 (appWidgetIds[0]),但这仅适用于应用打开时的情况。当我在最近的菜单中刷掉应用程序时,即关闭它,小部件停止更新。

我也尝试过使用单独的服务,但结果相同。大概是因为该服务不是前台服务,而且我不希望有一个持久的通知,所以我不能使用前台服务。

【问题讨论】:

    标签: android service widget


    【解决方案1】:

    当我在最近的菜单中滑动应用程序时,即关闭它,小部件停止更新。

    这通常会终止您的进程,此时您的 CountDownTimer 不再存在。

    我也尝试过使用单独的服务,但结果相同

    这不一定会阻止您的进程被终止,尽管它可能会帮助您更快地恢复进程。但是,在 Android 8.0+ 上,您的服务会在一分钟后停止。

    从电池消耗的角度来看,每 30 秒在后台工作是相当糟糕的,这就是为什么它在现代版本的 Android 上是不切实际的。

    【讨论】:

    • 当然不可能,一定有办法。我已经看到其他应用程序成功实现了此功能。 IE。小部件倒计时。
    • @daka:许多其他应用程序将遭受与您看到的相同的限制。一些可能会在单独的进程中生成服务,但这可能无法解决您在所有设备上的任务刷卡问题,即使这样,应用程序仍然会有限制(Android 6.0+ 上的打盹模式/应用程序待机,1 分钟的服务寿命Android 8.0+ 等)。它也不会改变您的应用程序的潜在问题(例如,必须保持WakeLock 以保持设备不断唤醒,以便您的CountDownTimer 继续运行)伤害用户。
    • 好的,我知道 android 6+ 对我不利,但我刚刚在 android 4.0 上尝试过,我遇到了同样的问题。
    • @daka:您可以尝试让您的服务在一个单独的进程中运行,看看它是否可以在旧版本的 Android 上为您提供更好的结果。
    • 感谢您为我指明正确的方向,我找到了答案。
    【解决方案2】:

    找到答案了。

    在服务的onStartCommand方法上,返回START_STICKY标志。这将告诉操作系统,如果服务因任何原因关闭,请在您有足够的资源时再次运行它。

    source
    more info

    重新启动时,您可以获取所有小部件 ID,如下所示:

    ComponentName thisWidget = new ComponentName(context,MyWidgetProvider.class);
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    

    source

    编辑

    您知道,在高于 API 23 的 android 版本中,即使是 START_STICKY 标志也不足以让操作系统重新启动服务。

    我决定跳过此功能,因为它在未来的 android 版本中不起作用。

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 1970-01-01
      • 2015-07-29
      • 2019-02-11
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多