小部件有时会停止

时间:2011-05-31 05:38:36

标签: android widget

我创建了一个小部件,每秒都显示倒计时。 但有时随机停止并且永远不会启动,我必须将其从屏幕上移除并再次添加到主屏幕才能启动。

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    final AppWidgetManager mngr = appWidgetManager;

    new CountDownTimer(endTime.getTimeInMillis(), 1000) {
        public void onTick(long millisUntilFinished) {
            updateClockValues(c, mngr);
        }

        public void onFinish() {
        }
    }.start();

}

private void updateClockValues(Context context, AppWidgetManager mngr) {

    System.out.println("update widget function");
    RemoteViews remoteViews;
    AppWidgetManager appWidgetManager = mngr;
    ComponentName thisWidget;

    final long sec = // some code to find seconds...and other values

    // Get views for widget
    remoteViews = new RemoteViews(context.getPackageName(),
            R.layout.widgetxml);
    thisWidget = new ComponentName(context, BreakingDownWidget.class);
    remoteViews.setOnClickPendingIntent(R.id.rlMain, configPendingIntent);
    remoteViews.setTextViewText(R.id.txtSec, sec);

    // Update widget
    appWidgetManager.updateAppWidget(thisWidget, remoteViews);

}

任何人都可以告诉我,如何在获得焦点时再次启动小部件,有时在屏幕之间切换会停止此操作。

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

我创建了一个小部件,每秒都显示倒计时。

请不要那样做。您在浪费用户的CPU时间和电池寿命。应用程序小部件旨在每隔几分钟更新一次,而不是每秒更新一次。

  

但有时随机停止并且永远不会启动,我必须将其从屏幕上移除并再次添加到主屏幕才能启动。

当然。 AppWidgetProvider是一个清单注册的BroadcastReceiver。这些组件应该存活几毫秒,足以让onReceive()完成,然后消失。如果需要RAM,Android可以并且将在之后终止您的进程。您的CountDownTimer正在分支后台主题,但明确注册的BroadcastReceiver不支持。