2

我有一个带有两个 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 分钟。谢谢

4

3 回答 3

7

您可以创建Handlerand Runnable,然后让以指定的时间间隔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()调用内部。

于 2013-03-10T01:33:54.343 回答
1

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

8. 教程:通过服务更新小部件

于 2013-03-10T00:39:27.053 回答
1

另一种可能性是使用TimerTimerTask类。您可以使用该Timer.schedule(TimerTask task, long delay, long period)方法来完成您需要的工作。

请记住,您无法从 TimerTask 中访问 UI 线程 - 因此,Handler.postDelayed()如果您已经打算将 aHandlerTimer类一起使用,则该方法可能是更好的选择。还有其他方法可以使用 访问 UI 线程TimerTask例如Activity.runOnUiThread().

于 2013-03-10T00:40:30.473 回答