草庐IT

android - 仅当设备开启且小部件在主屏幕上可见时才更新小部件

coder 2023-11-27 原文

就我对 Widgets 的官方文档的理解而言,我有点困惑。

“标准”方式是定义一个 BroadcastReceiver 并以毫秒为单位定义更新频率 - 这种方式允许最小更新间隔为 30 分钟以节省电池电量。听起来很合理。

我在阅读 Google 文档时发现的“手动”方式是使用 AlarmManager 自行处理小部件的更新。使用此方法可以实现更高的更新间隔(尽管当然不鼓励!)并且可以使用在休眠时不唤醒设备的警报类型。 (我假设一旦设备因其他原因唤醒,事件应该触发后的任何时间发送 Intent - 是这样吗??)

现在,我对以下想法感到困惑:小部件驻留在主屏幕上。或者至少这是它们最常见的地方。 Android 在主屏幕上提供了很多页面(标准是 5 或 7),因此即使用户放置在那里,Widget 也可能不可见!

只要小部件显示的信息只是一个非常简单的文本(比如当前时间!),可以在需要时立即计算或导出,我不希望不可见时的任何更新频率甚至设备唤醒 Intent !
但是只要设备开启,或者更具体地说:只要屏幕开启并且小部件可见,我想要很多更新事件!就像显示秒数的时钟需要每秒重新绘制的 Intent 一样!

如何实现? “Android模拟时钟”是如何实现的?方法 A(“标准”)和方法 B(“手动”)都不会给我很高的更新频率,但前提是设备打开并且我的小部件可见。

有人可以给我提示吗???

最佳答案

I assume the intent is sent any time after the event should trigger as soon as the device wakes up for some other reason - is that right??

是的。

I do not want any update frequency or even device wake-up intents when it is not visible!

但在很多情况下,您的用户会这样做。您在更新中所做的任何值得做的事情都可能需要几秒钟的时间。用户不会坐在那里等待几秒钟。因此,应用小部件更新模型表示您要不断更新应用小部件,因此当用户查看应用小部件时,他们会立即获得更新的数据。

But as long as the device is on, or more specific: as long as the screen is on AND the widget is visible, I want a lot of update events! Like a clock displaying the seconds needs an intent to redraw every second!

编写您自己的主屏幕应用。

How is the "Android analog clock" realized?

这是主屏幕应用程序的一项功能。

关于android - 仅当设备开启且小部件在主屏幕上可见时才更新小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5076769/

有关android - 仅当设备开启且小部件在主屏幕上可见时才更新小部件的更多相关文章

  1. ruby - 即时确定方法的可见性 - 2

    我正在编写一个方法,它将在一个类中定义一个实例方法;类似于attr_accessor:classFoocustom_method(:foo)end我通过将custom_method函数添加到Module模块并使用define_method定义方法来实现它,效果很好。但我无法弄清楚如何考虑类(class)的可见性属性。例如,在下面的类中classFoocustom_method(:foo)privatecustom_method(:bar)end第一个生成的方法(foo)必须是公共(public)的,第二个(bar)必须是私有(private)的。我怎么做?或者,如何找到调用我的cust

  2. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  3. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby-on-rails - 禁用设备的 :confirmable on-the-fly to batch-generate users - 2

    Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation

  6. ruby - 数组用逗号连接,仅当元素不为 nil 时 - 2

    是否有一种简单明了的方法来实现array.join(","),其中逗号仅包含在存在的元素之间?也就是说,如果数组中不存在某些元素,我不会得到孤儿逗号吗? 最佳答案 例子:["",nil,"测试词",5,7,nil,"",nil,"",7,6,""]=>"测试词,5,7,7,6"编辑:请注意,此处的第一种方法需要RubyonRails。将第二种方法用于仅限Ruby的解决方案您可以尝试删除nil和空字符串""然后用逗号连接(它删除所有nil值compact,然后它在""上执行split以创建一个二维数组,其中任何""元素在第一个数组只是

  7. ruby-on-rails - 仅当特定实例变量具有值时,如何 stub 实例方法? - 2

    我有一个对象MyObject:classMyObjectdefinitialize(options={})@stat_to_load=options[:stat_to_load]||'test'enddefresults[]endend仅当stat_to_load="times"时,我才想stubresults方法。我怎样才能做到这一点?我试过了:MyObject.any_instance.stubs(:initialize).with({:stat_to_load=>"times"}).stubs(:results).returns(["klala"])但它不起作用。有什么想法吗?

  8. ruby - 是否可以动态检查方法可见性范围(私有(private)/公共(public)/ protected )? - 2

    如thisanswer中所述,在Ruby2.1或更高版本中,此代码:classSimpleTestprivatedefine_method:foodo42endend将定义foo作为SimpleTest的私有(private)方法实例。(在Ruby2.0和更早版本中,它不会是私有(private)的。)但是,我希望做一些不那么琐碎的事情。我想定义一个类可以扩展的DSL,并希望DSL在内部定义的方法尊重调用上下文的私有(private)/protected可见性。这可能不是很清楚,所以这里有一个例子:moduleDsldefhas_a(name)define_methodnamedo42

  9. ruby-on-rails - 仅当满足某些条件时,如何将 "touch"关联为 `belongs_to` 关联的父模型? - 2

    我正在使用Rails3.1.0,并且我想仅在满足某些条件时“触摸”belongs_to关联的父模型。比如此时我有:belongs_to:article,:touch=>true只有当它是“公共(public)的”时,我才会“接触”父模型。也就是说,Article类有一个名为access的属性(@article.access=>public或private),我想在“触摸”之前检查这个值:如果这个值不是public,那么“触摸”它!是否可以在belongs_to关联声明中“直接”进行?如果是,怎么做? 最佳答案 您可以按照您所说的尝试

  10. 联通家庭宽带开启ipv6 - 2

    联通家庭宽带开启ipv6废话不多,直接开干首先登录联通光猫的后台,机身有写我的是http://192.168.1.1/CU.html广州家庭宽带账号密码CUAdmincuadmin00259e这里好像是默认设置,不大记得了。保存就好然后登陆路由器后台,我的是tp-link选桥模式这里的桥模式跟光猫的wan类型应该是互斥关系,光猫设置桥接,路由器就要设pppoe拨号,我没试过。然后在系统就可以查看了或者直接访问这个网址http://testipv6.com/注意1:如果你是便宜小米红米之类的路由器,他好像是默认不打开这个ipv6防火墙的,也就是你可能在系统上看到有ipv6地址,但实际上是不互通的

随机推荐