- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
无论是否安装了其他应用程序和表盘,我都在开发一系列复杂的功能。是的,在某些时候,我正在重新发明轮子,但与此同时,我将其用作学习项目。这也将确保我始终拥有自己使用的所有复杂功能,并且它们都具有相同的格式和样式,而不是依赖于第三方应用程序来单独提供它们。
该套件将具有以下方面的并发症:心率,gps坐标,小时,分钟,秒,dd / MM日期,dd / MM / yy日期,电池等。
当我开始对所有这些进行编程时,我发现了几个有问题的部分(很可能是因为这是我第一次开发出复杂性,或者是为此而开发的适用于Android Wear的应用程序),因此出现了这个问题。
请注意,某些行为可能特定于Huawei Watch 2 LTE。
1)升级间隔推/拉。
我了解作为数据提供者的复杂性,其唯一责任是将数据提供给任何表盘调用它们的人。这意味着我们不确定(我们依靠表盘开发人员)了解复杂情况并相应地请求更新。如果不及时更新,这会使一些复杂性完全无用(例如,显示“秒”)。也可能会导致显示旧数据(例如旧GPS坐标,旧心率bpm)的复杂性。
好的,我决定用ProviderUpdateRequester
实现AlarmManager
将数据推送到表盘。再次出现的问题是复杂性应该更快地发生,例如几秒钟,因为如果过于频繁地调度未完成的意图,Android将阻止它们。因此,为了解决这个问题,我决定在同一服务实例中使用Android处理程序,由于下一个主题,事实证明这不是一个好主意。
2)并发症生命周期
通过调试,我发现执行ComplicationProviderService
,onComplicationActivated
,onComplicationUpdate
的onComplicationDeactivated
对象的实例可以不同。这意味着这不是将始终运行的粘性服务(单个实例),但是每次更新都会创建该服务的新实例。这是有问题的,因为初始化工作繁琐:例如GPS或心率监测器需要侦听新值,并且可能需要一段时间才能检索到第一个值。而且,对于那些不能依赖于AlarmManager和/或需要在更新执行之间保持某种状态的复杂性。
3)显示感知服务
为了绕过上一点,我们假设您的复杂服务上有静态变量,这些变量已初始化onComplicationActivated
并在onComplicationDeactivated
禁用。例如,这可能会获取LocationProvider的参考并开始侦听位置更新。这将确保对onComplicationUpdate
的每次调用都不必执行繁重/冷的初始化,并且可以访问最新数据。
但是,这也意味着无论是否调用onComplicationUpdate
,您的逻辑都将执行。
在环境模式(或屏幕关闭)下,表盘可以决定不通过不调用onComplicationUpdate
来更新复杂性,但是它不了解我们的静态逻辑,ComplicationProviderService
也不具有在屏幕进入时的回调调用环境模式或打开/关闭。这是一个问题,因为在我们的示例中,如果屏幕关闭,我们仍将收听GPS坐标,并且很可能会耗尽电池电量。
当然,我们可以通过使用BroadcastReceiver(Intent.ACTION_SCREEN_ON / OFF)和DisplayManager.DisplayListener
的组合来处理此问题,但是再一次,不确定我在这里是否采用正确的路径,因为这将意味着我们现在正在创建需要静态了解显示状态的服务。
4)检测屏幕开/关
禁用环境模式时,BroadcastReceiver
的Intent.ACTION_SCREEN_ON/OFF
会按预期工作,但未启用。启用环境模式后,进入环境模式时将调度Intent.ACTION_SCREEN_OFF
,但退出环境模式时将不调度Intent.ACTION_SCREEN_ON
。稍微复杂一点,这可以通过使用DisplayManager.DisplayListener
在onDisplayChanged
回调上获取更新来完成。
TL; RD
1)您如何确保表盘及时显示您的并发症,以始终获得正确和最新的信息?
2)如果每次调用ComplicationProviderService
的服务实例都不相同,您如何处理onComplicationUpdate
的重/冷初始化?
3)使长时间运行的服务能够感知显示是否有些疯狂?
4)从技术上讲,在环境模式下,屏幕仍处于打开状态,那么为什么要播放Intent.ACTION_SCREEN_OFF
?启用环境模式后,为什么Intent.ACTION_SCREEN_ON/OFF
不是对称的?
5)也许不应该使用复杂性来公开实时信息?
非常感谢
最佳答案
需要解压缩的几件事:
并发症并非要经常更新(考虑分钟而不是秒),这是为了节省电池。ProviderUpdateRequester
设计用于(通常很少)不定期的更新,例如通过聊天应用程序发送的消息。
时间相关的复杂性-没有这样的“更新”,但是Wear提供了一些方法,使开发人员可以从特定时间开始向上/向下计数,并显示与日期相关的字段(世界时钟,每月的某天),而提供商不发送所有系统更新时间。对于这最后一个,请参考ComplicationText.TimeDifferenceBuilder
的文档
和ComplicationText.TimeFormatBuilder
。
对于您的用例,可能更适合考虑always-on app。用户在特定时间段内出于特定目的使用它,因此他们明确同意使用更多的电池来跟踪GPS或心率等信息。例如,许多在Wear上运行的应用程序都可以做到这一点。
我希望这有帮助。
关于android - Android Wear 2.0架构问题带来的实时复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137450/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!