Възможно ли е повторно използване на RemoteViews в appWidget вместо създаване на нови всеки път? и как мога да ги съхранявам?

В моя appWidgetProvider всеки път, когато трябва да актуализирам appWidget, трябва да създам нов обект RemoteViews и да му присвоя свойства:

RemoteViews views = new RemoteViews(context.getPackageName(),layout);
views.setOnClickPendingIntent(R.id.widgetLayout, pendingIntent);
view.setFloat(R.id.nick, "setTextSize", wParameters.getFontSize()); 
view.setTextViewText(R.id.nick,wParameters.getNick()); 
.........etc

appWidgetManager.updateAppWidget(appWidgetId, views);

Но всъщност трябва да променя само едно нещо, което е TextView Text.

Мога ли по някакъв начин да съхраня RemoteViews за повторно използване при следващата актуализация и просто да приложа

 view.setTextViewText(R.id.nick,wParameters.getNick()); 
 appWidgetManager.updateAppWidget(appWidgetId, views);

отново?

Или да получите използвания преди това обект RemoteViews по някакъв начин?

Искам да постигна това, защото процесът на задаване на новите свойства на RemoteViews обект отново е много скъп в моя appWidget.

Да приемем, че моята джаджа е направена от TextView и ImageView. Изображението на ImageView се избира в configureActivity на приспособлението (уникално за всеки екземпляр на appWidget), но обработката на изображението е скъпа. Текстът на TextView е необходимо да се променя при всяка актуализация. Искам да оставя изображението на ImageView такова, каквото е, и да променя само текста на TextView. възможно ли е да актуализирате TextView без да актуализирате imageView?

Ще се радвам на всяка помощ и идеи! Благодаря предварително, Гал.


person GalDude33    schedule 29.12.2011    source източник


Отговори (1)


Но всъщност трябва да променя само едно нещо, което е TextView Text.

След това променете само "текста на TextView".

AFAIK, стига да запазите същия ID на оформлението, не е необходимо да актуализирате всяка джаджа в оформлението, ако не искате. Въпреки това е ваше задължение да винаги знаете дали изпълнимият модул на приложението е бил изобразяван преди това, а това може да се окаже трудно. Следователно обикновено е по-лесно да актуализирате всяка джаджа всеки път.

Мога ли по някакъв начин да съхраня RemoteViews за повторно използване при следващата актуализация

No.

Или да получите използвания преди това обект RemoteViews по някакъв начин?

No.

Искам да постигна това, защото процесът на задаване на новите свойства на RemoteViews обект отново е много скъп в моя appWidget.

След това вършете работата в IntentService, стартирана от вашия AppWidgetProvider, тъй като ако е толкова скъпо, не искате да вършите тази работа в основната нишка на приложението.

person CommonsWare    schedule 29.12.2011
comment
Не мога да променя само TextView Text. Да предположим, че моята джаджа е направена от TextView и ImageView. Изображението на ImageView е постоянно и се избира в configureActivity на приспособлението (уникално за всеки екземпляр на appWidget). (обработката на изображението е скъпата част). Текстът на TextView трябва да се променя при всяка актуализация. Искам да оставя изображението на ImageView такова, каквото е, и да променя само текста на TextView. възможно ли е да актуализирате TextView без да актуализирате imageView? - person GalDude33; 30.12.2011
comment
тъй като API11 има функция: appWidgetManager.PartiallyUpdateAppWidget(appWidgetId, изгледи); Опитвам се да постигна същия ефект за API8. - person GalDude33; 30.12.2011
comment
@GalDude33: обработката на изображението е скъпата част -- поради което трябва да запазите модифицираното изображение във файл и да го направите достъпно за хоста на уиджета на приложението чрез ContentProvider. В края на краищата хората рестартират телефоните си и от това, което описвате, когато рестартират телефона си, те губят образа си. След като запазите изображението, обработката на изображението не се извършва при всяка актуализация, така че актуализациите стават евтини. Като се има предвид това, съществуването на partiallyUpdateAppWidget() показва, че първоначалната ми оценка вероятно е била неправилна, за което се извинявам. - person CommonsWare; 30.12.2011