首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >微件在关闭应用程序后停止更新

微件在关闭应用程序后停止更新
EN

Stack Overflow用户
提问于 2018-06-10 22:11:13
回答 2查看 670关注 0票数 0

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]),但这只在应用程序打开时才会发生。当我在“最近”菜单中滑动应用程序,即关闭它时,小部件停止更新。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-10 23:33:14

找到答案了。

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

source

more info

在重启时,您可以获取所有小部件ids,如下所示:

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

source

编辑

请注意,在高于 23的安卓版本中,即使是 START_STICKY 标志也不足以让操作系统重新启动该服务。

我已经决定跳过这个功能,因为它不能在未来的版本中运行。

票数 -1
EN

Stack Overflow用户

发布于 2018-06-10 22:16:25

当我在“最近”菜单中滑动应用程序,即关闭它时,小工具停止更新。

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

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50784567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档