我想要完成的最接近的例子是"Engadget“小部件。它每5-10分钟更新一次互联网上的数据,每5-7秒“滚动”一次故事。我想它为widget's provider设置了5 -10分钟的间隔来调用onUpdate,而没有内置的限制,就像这样。
AlarmManager alarms = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), updateRateSeconds * 1000, newPending); 然后真正的问题是..在不调用onUpdate的情况下更新小部件内容。
在这里,我想象一下,在小部件提供程序内部存在一个计时器或Runnable,每次调用它时,它都会用类似的东西重新调度自己
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
...
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 1000);
}。
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
final long start = mStartTime;
long millis = SystemClock.uptimeMillis() - start;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
...
mHandler.postAtTime(this,start + (((minutes * 60) + seconds + 1) * 1000));
}然后是onDeleted和onDisabled中的小部件提供程序
I removeCallbacks mHandler.removeCallbacks(mUpdateTimeTask);
这个计划有什么问题吗?我是否需要创建一个服务来从那里更新小部件,并在不为小部件的配置设置AlarmManager的情况下保持它的活动状态?由于某些原因,我在onUpdate上得到了双重调用,并且在我删除小部件后,runnable仍在运行。
发布于 2010-09-24 06:13:10
看看ViewFlipper吧。您可以使用它来更新一组项目的数据一次,然后设置它们的循环频率。
发布于 2010-12-14 05:19:05
任何持续运行(例如,mp3播放器或无线电)或需要某种形式的轮询(警报,所以显示窗口小部件,天气错误)的东西都应该作为服务编写。我知道这是旧的,但请查看这些视频,了解有关最佳实践的更多信息
http://developer.android.com/videos/index.html#v=M1ZBjlCRfz0
https://stackoverflow.com/questions/3782389
复制相似问题