如何定期更新窗口小部件,比如每5秒钟后更新一次

Ati*_*ska 8 android android-widget

我有一个带有简单按钮实现的小部件,每当我们点击一​​个按钮时,它就会翻转一组给定的图像.现在,如果我想在没有点击按钮的情况下每5秒翻一次,我该怎么办?

Cyr*_*oux 10

首先,我强烈建议您不要每5秒更新一次小部件.它会立刻杀死你的电池.

您可以在appwidget-provider中使用android:updatePeriodMillis属性.在Android开发人员网站上
查看添加AppWidgetProviderInfo元数据.
问题是,为了节省电池,你不能设置30分钟(1800000毫秒)以下的时间.

设置所需的更新周期后,您只需在AppWidgetProvider的onReceive()方法中定义行为即可.为此,您必须捕获ACTION_APPWIDGET_UPDATE事件.

@Override
public void onReceive(Context context, Intent intent) {

    final String action = intent.getAction();

    if (ACTION_APPWIDGET_UPDATE.equals(action)) {
        // Update your widget here.
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你真的想每5秒执行一次任务,你可以使用TimerTimerTask类:

final Handler handler = new Handler();
Timer timer = new Timer();

TimerTask task = new TimerTask() {

    @Override
    public void run() {
        handler.post(new Runnable() {
            public void run() {  
                // send a broadcast to the widget.
            }
        });
    }
};
timer.scheduleAtFixedRate(task, 0, 5000); // Executes the task every 5 seconds.
Run Code Online (Sandbox Code Playgroud)

  • 你把这个放在哪里? (4认同)

Kum*_*bek 5

使用 AlarmManager 触发警报,向您的接收器发送更新意图。

这是一个很好的链接,给出了一个例子。

http://www.parallelrealities.co.uk/2011/09/using-alarmmanager-for-updating-android.html

  1. 当小部件被激活时,在小部件服务中,设置 5 秒后的下一个警报。
  2. 警报应发送 PendingIntent,这将在 5 秒后触发您的服务。
  3. 在服务的 onStartCommand 中,触发小部件更新服务。
  4. 并在 5 秒后再次设置下一个闹钟。

注:但是,5秒,实在是太快了。它很快就会耗尽你的电池,具体取决于你在后台可能做的其他事情。请考虑降低更新频率。


Asw*_*ran 0

Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    public void run() {
        runOnUiThread(new Runnable() {
            public void run() {
                imageView.setImageBitmap(bitmap);
            }
        });
    }
}, 5000, 5000);
Run Code Online (Sandbox Code Playgroud)

第一次更改将在 5 秒后发生。

  • 我应该将此代码放在 android-widget 的 Provider 或 Service 类中的哪里? (3认同)