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

Posted

技术标签:

【中文标题】定期更新小部件 TextView 的简单方法【英文标题】:Simple way To Update Widget TextView Periodically 【发布时间】:2013-02-25 09:22:48 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以创建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() 调用。

【讨论】:

什么Activity?没有Activity,因为这是Widget【参考方案2】:

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

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

【讨论】:

那不相关他们的服务与定期更新无关。【参考方案3】:

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

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

【讨论】:

我可能是错的,但如果你使用TimerTask,你可能会在更新你的 UI 时遇到麻烦,因为 UI 更新应该在 UI 线程上完成,而TimerTask 在它自己的运行线程。 是的,你是对的。您必须使用 runOnUiThread()Handler 来更新 UI 线程。我会说使用Timer 方法而不是Handler.postDelayed() 方法是一个偏好问题——在写我的答案时,唯一的其他建议答案是AlarmManager 方法。当然,如果您打算使用Handler 在UI 线程上进行更新,那么从一开始就使用Handler.postDelayed() 方法可能更有意义。我将对我的答案进行编辑,并将其作为另一种可能的选择。 我之前尝试过但失败的任何 id 放在哪里的例子.. 你把这个Timer放在哪里以及如何开始?

以上是关于定期更新小部件 TextView 的简单方法的主要内容,如果未能解决你的问题,请参考以下文章

小部件上的 TextView 未使用 OnUpdate 方法更新

Android主屏幕小部件未更新

使用计时器时小部件 TextView 未更新

使用 API 数据更新小部件的 TextView

当运行音乐播放器的服务实际开始播放时更新小部件的 Textview

不定期更新小部件