Android 小部件在几分钟后停止更新

Android 小部件在几分钟后停止更新,android,timer,widget,textview,handler,Android,Timer,Widget,Textview,Handler,我正在开发一个小部件,它使用两个TextView显示时间和日期,并使用计时器每秒更新一次: final Handler handler = new Handler(); Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { handler.post(new Runnable() {

我正在开发一个小部件,它使用两个
TextView
显示时间和日期,并使用
计时器每秒更新一次:

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
它在添加时更新小部件,但几分钟后停止。在我重新启动后,它也很难加载,但主要的问题是
计时器似乎在这么多分钟后停止了。。。

有人知道发生了什么吗?感谢

由于应用程序小部件只是主屏幕进程托管的广播接收器,您必须使用
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);

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);
                    }
             ...

看看这是否对你有帮助:在我的情况下,我能找到这样做的方法吗?或者是一个我可以用自己的代码解释的例子
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);
                    }
             ...