我有一个倒计时的小部件。它在主屏幕上,当我停留在主屏幕上时它似乎工作正常,但是当我切换到另一个屏幕一段时间然后回到主屏幕时,小部件开始滞后。
当我在其他屏幕上时,它似乎没有进行更新,因为时间没有更新,现在它正在执行所有更新一起计算倒计时时间。这会导致延迟,并且手机会冻结(当我每分钟调用更新时)。如果我想每秒更新一次 - 在大约 20 分钟的屏幕锁定时间或其他失焦操作后,手机会完全冻结。
问题:我是否可以隐式告诉小部件继续更新,无论它是否显示在屏幕上?或者还有什么办法可以解决这个问题?
View.OnFocusChangeListener
我猜你可以用它来监控你的小部件是否在焦点上。在谷歌文档上查看。我自己还没有使用它,所以我不确定它是否会起作用,但它绝对值得一试。
http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
我不确定你是否这样做,但你必须使用 AlarmManager 类来更新你的小部件。不要使用任何线程或可能导致延迟的东西。我用过它,它对我有用。看到这个
这是一个糟糕的整体设计 - 如果您必须计算每个“滴答”并让它在那个时候发生,那么服务可能是完成这项工作的最佳选择,只需让小部件询问服务它应该显示什么。
但是......你会吸电池的东西很糟糕。它真的需要在每个滴答声上做一些事情,还是你可以只存储最后一次绘制时间,找到当前时间然后相应地更新,跳过中间的所有滴答声?
如果在达到零时需要发生某些事情,请尝试使用 android 警报系统。你会对用户的电池寿命和 CPU 以不同的方式做得更好。