简单的方法来更新窗口小部件TextView定期



我有一个小部件,两个TextView显示时间和日期。

我只是想让这批代码每秒钟发生一次:

views.setOnClickPendingIntent(R.id.rl, pendingIntent);
java.util.Date noteTS = Calendar.getInstance().getTime();
String time = "kk:mm";
String date = "dd MMMMM yyyy";
views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS));
views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS));

所以我需要一个简单的方法来更新TextView定期在小部件,所以时间变化超过标准的30分钟。由于

您可以创建HandlerRunnable,然后让Handler在指定的间隔重新启动您的Runnable。您的程序可能看起来像这样:

private Handler mHandler = new Handler();
@Override
public void onResume() {
    super.onResume();
    mHandler.removeCallbacks(mUpdateClockTask);
    mHandler.postDelayed(mUpdateCLockTask, 100);
}
@Override
public void onPause() {
    super.onPause();
    mHandler.removeCallbacks(mUpdateClockTask);
}
private Runnable mUpdateClockTask = new Runnable() {
    public void run() {
        updateClock();
        mHandler.postDelayed(mUpdateClockTask, 1000);
    }
};

updateClock()里面你做所有的UI更新。我想所有这些都发生在Activity内部,使用适当的onPause()/onResume()调用。

你必须使用AlarmManager,查看本教程的详细信息:http://www.vogella.com/articles/AndroidWidgets/article.html#widget_update不要忘记检查这部分:

8。教程:通过服务

更新小部件

另一种可能是使用Timer和TimerTask类。你可以使用Timer.schedule(TimerTask task, long delay, long period)方法来完成你需要的。

请记住,您不能从TimerTask中访问UI线程-因此,如果您已经打算在Timer类中使用Handler,那么Handler.postDelayed()方法可能是更好的选择。有其他方法可以访问带有TimerTask的UI线程,例如Activity.runOnUiThread()

最新更新