2013-04-01 120 views
1

即時通訊開發一個小部件,顯示使用兩個TextView使用timer更新時間和日期每一秒:的Widget幾分鐘後停止更新

final Handler handler = new Handler(); 
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 

      handler.post(new Runnable() { 
        public void run() { 
         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)); 
         appWidgetManager.updateAppWidget(appWidgetId, views); 
        } 
      }); 
    } 
}, 0, 1000);// Update textview every second 

它更新時添加小部件,但停止了幾分鐘後, 。另外它很難加載後,我重新啓動,但主要的問題是,似乎timer停止這麼多分鐘後... 任何人都知道是怎麼回事?謝謝

+0

看看這可以幫助您:http://stackoverflow.com/questions/13158163/timer-task-stops-running-after-indefinite-time-in-android –

回答

0

由於應用程序小部件只是主屏幕進程託管的廣播接收器,因此您必須使用AlarmManager來調度您的小部件。如果不僅僅是測試,請注意,由於設備永遠不會進入睡眠狀態,因此電池電量將耗盡。通常,每秒更新應用程序小部件並不是一個好主意。

它可以(在這裏爲喚醒在一分鐘內)來完成類似下面的代碼

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(MyWidget.ACTION_MYACTION); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
long triggerAtTime = getNextOccurrence(1); // next minute 
am.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pi); 

static private long getNextOccurrence(int deltaMinutes) 
    { 
      Calendar calendar = Calendar.getInstance(); 
      long now = calendar.getTimeInMillis(); 
      long then = now + (deltaMinutes * 60 * 1000); 
      return then; 
    } 

OnReceive

public void onReceive(Context context, Intent intent) 
    { 
      Log.d(TAG, "onReceive() " + intent.getAction()); 
      super.onReceive(context, intent); 

      if (intent != null) 
      { 
        if (ACTION_MYACTION.equals(intent.getAction()) 
        { 
          updateWidgets(context); 
        } 
      ... 
+0

我可以得到一種方法在我的情況下做到這一點嗎?或者,也許我可以解釋我自己的代碼 – Timmo

+0

我更新了我的答案。 –