2013-04-01 82 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

我更新了我的答案。 –