App Widget更新TextView

时间:2010-12-07 16:00:16

标签: android timer textview android-appwidget

我一直在关注制作Android App Widgets的教程,我遇到了一些麻烦。该教程让我创建了这段代码:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int [] appWidgetIds) {
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000);
}

private class MyTime extends TimerTask {

    RemoteViews remoteViews;
    AppWidgetManager appWidgetManager;
    ComponentName thisWidget;
    DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());

    public MyTime(Context context, AppWidgetManager appWidgetManager) {
        this.appWidgetManager = appWidgetManager;
        remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
        thisWidget = new ComponentName(context, FlipWidget.class);
    }

    @Override
    public void run() {
        remoteViews.setTextViewText(R.id.widget_text, "Time: "+format.format(new Date()));
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    }
}

但似乎永远不会调用run方法,因为TextView永远不会改变。感谢您的帮助,我很乐意了解App Widgets。

尼克

1 个答案:

答案 0 :(得分:3)

首先,您无法使用Timer。在AppWidgetProvider返回后,您的TimeronUpdate()将被垃圾收集。

其次,请不要每秒更新一个应用小部件。 android:updatePeriodMillis最少有30分钟的原因是有道理的 - 推动对应用小部件的更新是一项昂贵的操作。每秒更新一次不仅会强制您“更新应用程序小部件”代码有效地驻留在内存中并且一直在运行,但您也会非常重视用户的电池。

要定期更新应用小部件,请使用android:updatePeriodMillis或使用AlarmManager