2010-12-07 4 views
3

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

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

но мне кажется, что метод запуска никогда не вызывается, как TextView никогда не меняется. Спасибо за вашу помощь, я бы с удовольствием посмотрел на App Widgets.

Ник

ответ

3

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

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

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

+0

Хорошо, спасибо вам за помощь. Часы должны обновляться каждую секунду, будет ли AlarmManager позволять мне делать эту батарею эффективно? – Nick 2010-12-07 17:55:50

Смежные вопросы