任何人都可以告诉我每分钟更新小部件的最佳方式。如何每分钟更新小部件
现在我使用AppWidget内的线程,但有时我得到错误失败的BINDER TRANSACTION!在那个错误之后,我总是得到很多像这样的错误,而且我无法再改变我的小部件中的视图。
感谢
任何人都可以告诉我每分钟更新小部件的最佳方式。如何每分钟更新小部件
现在我使用AppWidget内的线程,但有时我得到错误失败的BINDER TRANSACTION!在那个错误之后,我总是得到很多像这样的错误,而且我无法再改变我的小部件中的视图。
感谢
而不是使用在AppWidget一个线程,你将得到更好的使用AlarmManager安排重复AppWidget更新意图,你的代码将妥善处理服务。
这种方法的好处是可以配置更新速率,并且还可以处理设备睡眠的情况(而不是唤醒来运行代码,甚至因为线程繁忙而被阻止进入睡眠状态)。
互联网上有很多examples,应该解释使用AlarmManager来提高你的AppWidget更新意图的来龙去脉。
它还具有将代码保留在RAM外的优点,除非需要时。 – CommonsWare 2010-10-06 12:45:47
我最终使用AlarmManager它的工作.. thankssss – user430926 2010-10-11 07:52:00
系统根据系统时钟在每分钟的确切开始处发送广播事件。用你的widget创建一个服务,做这样的事情:
BroadcastReceiver _broadcastReceiver;
private final SimpleDateFormat _sdfWatchTime = new SimpleDateFormat("HH:mm");
private TextView _tvTime;
@Override
public void onStart() {
super.onStart();
_broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
if (intent.getAction().compareTo(Intent.ACTION_TIME_TICK) == 0)
_tvTime.setText(_sdfWatchTime.format(new Date()));
}
};
registerReceiver(_broadcastReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
}
@Override
public void onStop() {
super.onStop();
if (_broadcastReceiver != null)
unregisterReceiver(_broadcastReceiver);
}
但是不要忘了事先初始化你的TextView(为当前系统时间),因为很可能你会弹出一分钟的中间你的UI并且在下一分钟发生之前TextView不会更新。
您无法安全地从AppWidgetProvider或任何其他的BroadcastReceiver分叉线程。请不要这样做。 – CommonsWare 2010-10-06 12:46:17