Android widget在';没有显示

Android widget在';没有显示,android,widget,updating,Android,Widget,Updating,我有一个倒计时的小部件。 它在主屏幕上,当我停留在主屏幕上时,它似乎工作正常, 但当我切换到另一个屏幕一段时间,然后回到家里,小部件开始滞后 当我在另一个屏幕上时,它似乎不做更新,因为时间没有更新,现在它正在执行所有更新,一起计算倒计时时间。这会导致延迟和短手机冻结(当我每分钟呼叫更新时)。如果我想每秒钟更新一次,手机会在大约20分钟的屏幕锁定时间或其他离焦动作后完全冻结 问题:我是否可以含蓄地告诉小部件继续更新,不管它是否显示在屏幕上?或者如何解决此问题?View.OnFocusChangeL

我有一个倒计时的小部件。 它在主屏幕上,当我停留在主屏幕上时,它似乎工作正常, 但当我切换到另一个屏幕一段时间,然后回到家里,小部件开始滞后

当我在另一个屏幕上时,它似乎不做更新,因为时间没有更新,现在它正在执行所有更新,一起计算倒计时时间。这会导致延迟和短手机冻结(当我每分钟呼叫更新时)。如果我想每秒钟更新一次,手机会在大约20分钟的屏幕锁定时间或其他离焦动作后完全冻结


问题:我是否可以含蓄地告诉小部件继续更新,不管它是否显示在屏幕上?或者如何解决此问题?

View.OnFocusChangeListener

我猜你可以用它来监控你的小部件是否处于焦点。在谷歌文档上查看。我还没有使用它自己,所以我不确定它会工作,但它肯定值得一试

http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html

这是一个糟糕的总体设计-如果你必须计算每个“勾号”,并让它在那个时候发生,那么服务可能是完成这项工作的最佳方式,让小部件询问服务应该显示什么

但是。。。你会吸电池的,很糟糕的东西。它真的需要在每个刻度上做些什么吗?或者你可以只存储最后一次绘制时间,找到当前时间,然后相应地更新,跳过中间的所有刻度吗


如果需要发生什么事情,当它达到零,尝试使用安卓报警系统。您将更好地使用用户的电池寿命和CPU,并以不同的方式进行操作。

我不确定您是否这样做,但您必须使用AlarmManager类来更新您的小部件。不要使用任何线程或可能导致延迟的东西。
我用过它,它对我有用

当视图没有聚焦时,你是如何保持时间的呢?事实上,这与我无关,因为在它聚焦后,它似乎调用了它错过的所有更新,而不仅仅是一个(最后一个)我之所以问这个问题,是因为我在想,你可以在小部件失去焦点时计算系统时间,然后当它重新聚焦时再计算,做一点数学运算,然后像那样获得你的时间……这只是一个想法,我不确定细节和你的代码是什么样子,但这可能会节省在后台一直使用增量更新的时间。我能在小部件不在屏幕上的情况下抓住焦点吗?因为我在论坛上看到的是聚焦——当有人点击小部件时。