Обновление виджета приложения TextView - PullRequest
3 голосов
/ 07 декабря 2010

Я следовал руководству по созданию виджетов приложений для Android, и у меня возникли небольшие проблемы. Учебник побудил меня создать этот код:

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 никогда не изменяется. Спасибо за вашу помощь, я хотел бы получить представление о виджетах приложений.

Ник

1 Ответ

3 голосов
/ 07 декабря 2010

Во-первых, вы не можете использовать Timer. Ваши AppWidgetProvider и Timer будут собираться после того, как onUpdate() вернется.

Во-вторых, пожалуйста, не обновляйте виджет приложения каждую секунду. Существует причина, по которой android:updatePeriodMillis имеет 30-минутный минимум - загрузка обновлений в виджеты приложений - дорогостоящая операция. Обновление по одной каждую секунду не только заставит ваш код «обновить виджет приложения» эффективно находиться в памяти и постоянно работать, но вы также значительно сократите заряд батареи пользователя.

Для периодических обновлений виджета приложения, используйте android:updatePeriodMillis или AlarmManager.

...