2013-05-31 38 views

回答

2
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() { 
    public void run() { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       imageView.setImageBitmap(bitmap); 
      } 
     }); 
    } 
}, 5000, 5000); 

第一次改变会在5秒后发生。

+1

我应该把这段代码放在android-widget的Provider或Service类中? – Atihska

5

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

您可以在appwidget-provider中使用android:updatePeriodMillis属性。
在Android开发人员网站上查看Adding the AppWidgetProviderInfo Metadata
事情是,为了保存电池,你不能设置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. 
    } 
} 

如果你真的要执行任务每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. 
4

使用AlarmManager到tirgger关闭,将发出一个更新意图接收机报警。

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

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

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

注意:但是,5秒,真的太快了。它会很快耗尽你的电池,这取决于你在后台可能会做什么。请考虑减少更新次数。