每10秒自我更新一次的小部件Handler.postDelayed问题

2023-12-23

我正在尝试使工作成为 Android 小部件中的自我更新功能,就像每 10 秒更改它的两个 TextView 一样简单。理想的解决方案是使其类似于精灵小部件(新闻和天气)。到目前为止,它工作正常:它通过 Handler.postDelayed 的 Runnable 每 10 秒更新一次。

Runnable updateWidgetText = new Runnable()
{
    @Override
    public void run() {
        if (screenEnabled) {
            AppWidgetManager gm = AppWidgetManager.getInstance(ctx);                        
            ComponentName thisWidget = new ComponentName(ctx,AnimeUndergroundWidget.class);         

            int index = (int)(REFRESH_COUNT % WIDGET_NEWS_TO_SHOW);
            Noticia n = AUnder.single().getNoticiaByIndex(index);
            if (n!=null)
            {
                last = n;
                RemoteViews views = new RemoteViews(ctx.getPackageName(),R.layout.auwidget);    
                views.setTextViewText(R.id.widget_textview, n.getTitulo());
                views.setTextViewText(R.id.widget_textototal, n.getTexto().replace("\n", ""));  

                Intent clickintent = new Intent(INTENT_GO_TO_NEW);
                PendingIntent pendingIntentClick = PendingIntent.getBroadcast(ctx, 0, clickintent, 0);
                views.setOnClickPendingIntent(R.id.widget_fondo_titulo, pendingIntentClick);

                Intent click2intent = new Intent(INTENT_GO_TO_NEW);
                PendingIntent pendingIntentClick2 = PendingIntent.getBroadcast(ctx, 0, click2intent, 0);
                views.setOnClickPendingIntent(R.id.widget_fondo_Texto, pendingIntentClick2);

                gm.updateAppWidget(thisWidget, views);
            }
            REFRESH_COUNT++;
        }

        handler.removeCallbacks(this);
        handler.postDelayed(this, WIDGET_REFRESH_TIME*1000);
    }   
};  

runnable 最初是在我的 Widget 类的 onUpdate 方法中启动的:

    @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    ctx = context;
    context.startService(new Intent(context, UpdateWidgetService.class));   
    handler.postDelayed(updateWidgetText,WIDGET_REFRESH_TIME*1000);
// here goes some more code, updating the views and refreshing click intents
}

我把这个放在以防有人发现它有用。

但让我直接进入正题:当我让手机退出睡眠状态(打开屏幕)时,小部件会疯狂并开始以类似快进的效果更改 TextView。 我认为这是因为队列中有一些 postDelayed 事件,或者可能在 updateAppWidget 队列中。 我已经使用此处显示的代码尝试了解决方法:http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/ http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/您可以在我的代码的第一个片段中看到它,我检查一个已存储屏幕状态的布尔变量,以避免在屏幕关闭时使用 postDelayed。但这似乎并不能解决问题。

这个问题已经让我发疯了一个星期了,所以我绝望地问:有什么办法可以正确地做到这一点吗?


您的 postDelayed 调用不在 if (screenEnabled) 块内,因此即使 screenEnabled 为 false,它也会继续发布事件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每10秒自我更新一次的小部件Handler.postDelayed问题 的相关文章

  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • Android NDK 中使用“dynamic_cast”时出现“UnsatisfiedLinkError”

    我是 Android 开发新手 我面临下一个问题 当我使用 C 代码时 动态演员 表达方式 不满意的链接错误 当我在模拟器上启动应用程序时出现 但是当我在没有它的情况下运行应用程序时 一切正常 我的意思是 LogCat 没有任何错误 我尝试
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • FileNotFoundException:/存储/模拟/0/Android

    我尝试这个文件写入器 读取器代码段进行测试 File file new File Environment getExternalStorageDirectory LM lm lisdat 01 txt FileOutputStream ou
  • Retrofit-2 内容类型问题

    我的 Api 接受 Content Type application json 作为标头 我按照改造文档中所述完美设置了标题 Headers Content Type application json POST user classes C
  • Youtube 退出全屏模式 TextView 可见性问题

    我正在全屏模式下播放视频 当我单击后退按钮时 我可以退出全屏模式 但无法显示我在全屏情况下隐藏的 TextView 要在全屏模式下隐藏 textView 我使用以下代码 Override public void onInitializati
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • 如何强制从本机代码打开 Android 软键盘?

    我有一个游戏 当用户触摸屏幕时 它使用从 C 到 Java 的回调来强制打开软键盘 Java代码很简单是这样的 this inputMethodManager toggleSoftInput InputMethodManager SHOW
  • 导航抽屉默认片段

    我是一名新手开发人员 我正在将导航抽屉与 android support v7 集成到我的应用程序中 我有一个问题 当我启动应用程序时 主要布局是这样的
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • java.lang.IllegalArgumentException:找不到片段的 id 0x1020002 (android:id/content) 的视图

    我正在尝试从一个片段移动到另一个片段 它在片段事务期间显示以下错误 java lang IllegalArgumentException No view found for id 0x1020002 android id content f
  • onClick 未在带有子项的 LinearLayout 上触发

    我有一个自定义的 LinearLayout 和一个较小的 TextView 子级 我希望能够单击 TextView 未覆盖的区域 因此我将 clickable true 和 onclicklistener 设置为 LinearLayout
  • BottomSheetDialog get Behavour 始终返回 null

    我与底部表单对话框我必须获得行为才能设置setBottomSheetCallback 来处理一些事情 As 谷歌说 https android developers googleblog com 2016 02 android suppor
  • Vimeo 视频在 Android 6 设备上停止播放

    我正在尝试在我的应用程序中播放 Vimeo 的视频 问题是在 Android 6 设备上 视频会在一定时间后停止播放 在 API 较低的设备上一切正常 时间取决于质量 对于下面提供的网址的视频 播放一定分钟 1 到 3 视频质量有多低 播放
  • Android 从命令行停止模拟器

    这个问题与如何通过命令行关闭Android模拟器 https stackoverflow com questions 5912403 how to shut down android emulator via cmd 但是 在尝试第一个答案
  • Android - 如何更改 TimePicker 中的文本颜色?

    我正在使用 TimePicker 到 LinearLayout 中 背景颜色 黑色 但是 我看不到 TimePicker 中的数字 并且我需要在布局中将背景颜色设置为黑色 如何更改 TimePicker 中的 textColor 我已经尝试
  • Nexus 7 (2013) 和 Win 7 64 - 尽管检查了许多论坛和在线资源,仍无法安装 USB 驱动程序

    我正在尝试设置 Nexus 7 2013 进行调试 但我在安装 USB 驱动程序的步骤中陷入困境 到目前为止 这是我尝试过的 采取的步骤 在 Nexus 7 2013 上打开调试模式 连接设备至 PC 下载 Google USB 驱动程序于
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A

随机推荐

  • WPF 将文本从一个窗口传递到另一个窗口

    我有一个主窗口 它有一个按钮 当我按下主窗口按钮时 它将打开子窗口 在子窗口中 我有一个文本框 当我输入文本并单击子窗口中的添加按钮时 文本应显示在主窗口上 我该如何实现这一目标 提前致谢 您可以创建 MainWindow 类的参数化构造函
  • 调试 TestNG 配置失败

    我正在从 Ant 运行 TestNG 我正在使用我自己的测试监听器 我正在重构代码 有一段时间我得到了 testng Total tests run 7 Failures 0 Skips 7 testng Configuration Fai
  • 对重载函数的不明确调用

    我有两个功能 void DoSomething const tchar apsValue void DoSomething size t aiValue 现在我想将 0 作为 size t 传递 DoSomething 0 编译器抛出错误
  • Meteor:“=> 退出,代码:8”错误

    刚刚开始使用 Meteor 按照中提供的教程进行操作发现流星 https www discovermeteor com 实现第 3 章的代码后 我不断收到以下错误 W20150714 18 47 36 539 7 STDERR W20150
  • 优化多个OR查询

    我有一个数据库表 我需要验证用户是否输入了相同或部分相同的信息 这就是我的想法 数据库布局 rec id pk user id name phone address 1 address 2 zip company co phone co a
  • iPhone崩溃日志中的内存地址代表什么意思?

    我今天一直在查看 iPhone 应用程序生成的崩溃日志 Thread 0 Crashed 0 libobjc A dylib 0x3002d7da 0x3002b000 10202 1 UIKit 0x31ec4abc 0x31e4d000
  • 为服务/数据/缓存部署多个实例的好处

    尽管我有很多编写代码的经验 我真的没有太多部署经验 我正在编写一个项目 使用 mongodb 进行持久化 使用 redis 进行元缓存 并使用 play 来提供页面服务 我正在决定是否购买专用服务器 还是从 amazon linode 购买
  • 在 WebViewClient 中启用通用 JavaScript

    在谷歌搜索答案时 似乎我并不是唯一一个遇到似乎无法解决的问题的人 我成功地使用自定义 WebViewClient 创建了一个 WebView 这使得我可以拥有一个进程对话框 并在无法加载 URL 时显示错误消息 但这会给 JavaScrip
  • 出现错误 #1221 - UNION 和 LIMIT 的使用不正确

    我正在尝试使用这两个查询进行联合查询union在查询之间但出现错误 121 UNION 和 LIMIT 的使用不正确 请帮助我进行联合查询以获得这两个查询的结果 query1 SELECT t1 TraineeID t2 attnDate
  • 无需事务即可获取数据

    下面是 spring transaction 的示例代码片段 我的问题 相同的会话将用于获取第 1 行和第 2 行的实体吗 我的理解 我相信是的 这将由春季交易来保证 Transactional public void method1 fe
  • 如何为 f.select 表单字段设置空白值

    我使用以下内容允许我的用户在他们的个人资料中选择他们的性别 如果没有任何内容传递到 user sex 列 我将如何创建列表默认的空白值 我只是将男性或女性作为字符串传递 目的是我想要一个空白值 以便验证可以确保他们知道必须选择它 有两种可能
  • MySQL 获取两个用户之间的对话

    我有一个名为 private messages 的 SQL 表 其中包含字段 id from to message stamp 标记字段对应于消息的日期 那么我需要什么查询 1 获取两个用户之间的对话 按日期排序 我已经尝试过查询 SELE
  • Hive 中的 Presto UNNEST 函数相当于什么

    急板有一个UNNEST函数分解由数组组成的列 Hive 有类似的吗 请参阅文档UNNEST急速功能here https prestodb io docs current sql select html Use lateral view ou
  • 使用 DTO 时,Automapper 和 Nhibernate 反映正在更新的域对象中 DTO 子集合的更改

    我对这个设计不是很熟悉 但我希望得到一些指导 我有一个后端服务 它将 DTO 发送到 WPF 智能客户端 在 WPF 智能客户端上 用户将更改 删除和修改项目 然后将更改发送回 客户端 gt 服务器 举个例子 目前我正在处理客户详细信息表单
  • 无法让 dokka 在 gradle/android 项目上生成 kotlin 文档

    我正在关注 gradle 插件部分https github com Kotlin dokka https github com Kotlin dokka 我还尝试了 dokka gradle example 中的示例https github
  • Spring结果集提取器

    如何使用ResultSetExtractor从数据库检索数据 这里我使用oracle 10g作为后端 如果从员工表中搜索员工详细信息 哪个更好ResultSetExtractor or RowMapper 从 java 8 开始 还可以使用
  • 无继承的 OOP 重用:这在“现实世界”中有多实用?

    本文描述了一种我觉得很有趣的 OOP 方法 如果对象存在为 封装和通信 通过消息 如果代码重用了怎么办 与继承无关 但是 使用组合 委托 甚至 老式的辅助对象或任何 程序员认为合适的技术 本体并没有消失 但它 与实现分离 最令我震惊的是无需
  • 如何使用 Spring 的 JDBCTemplate 有效执行 IN() SQL 查询?

    我想知道是否有一种更优雅的方法来使用 Spring 的 JDBCTemplate 进行 IN 查询 目前我正在做类似的事情 StringBuilder jobTypeInClauseBuilder new StringBuilder for
  • JavaFX 没有 TouchEvents

    在我的 Windows Surface Go 2 平板电脑上 我无法检索任何 多点触控 触摸事件 我尝试了几个 Java FX 版本 即使使用 JavaFX 17 及更早版本 也不会生成 TouchEvents 事件 仅生成鼠标事件 是否需
  • 每10秒自我更新一次的小部件Handler.postDelayed问题

    我正在尝试使工作成为 Android 小部件中的自我更新功能 就像每 10 秒更改它的两个 TextView 一样简单 理想的解决方案是使其类似于精灵小部件 新闻和天气 到目前为止 它工作正常 它通过 Handler postDelayed