Сигнатура конструктора RemoteViewsFactory выглядит следующим образом:
public TestRemoteViewsFactory(Context context, Intent intent);
Конструктор принимает два аргумента. Первый аргумент — это контекст. Поскольку эта фабрика создается вашей собственной реализацией RemoteViewsService ( в ), для получения контекста можно использовать метод getApplicationContext.
Вторым аргументом конструктора является намерение. Это то же самое намерение, которое используется для обращения к службе удаленного представления.
Внутри конструктора оба эти значения (контекст и намерение) могут быть сохранены в локальных переменных, которыми будут пользоваться последующие методы. Эти фабрики кешируются на основе намерений.
Обратный вызов onCreate
Сигнатура метода onCreate такова:
public void onCreate
Следуя шаблону многочисленных компонентов в Android, класс RemoteViewsFactory предоставляет методы onCreate и onDestroy.
На заметку! Чтобы понять, когда и как методы onCreate и onDestroy вызываются, необходимо просмотреть два файла исходного кода Android: RemoteViewsService.java и AppWidgetService. java.
Как уже упоминалось, когда служба RemoteViewsService осуществляет вызов для создания вашего экземпляра RemoteViewsFactory , она кеширует этот объект фабрики. Кеш основан на уникальности намерения, которое использовалось для обращения к службе.
При создании виджета на домашнем экране повторные обновления данных виджета не обязательно приведут к созданию множества экземпляров объекта RemoteViewsFactory. Вместо этого будет использоваться кешированный объект фабрики. Когда объект RemoteViewsFactory создается в первый раз, вызывается его метод onCreate.
Объект RemoteViewsFactory также используется повторно, когда на домашнюю страницу помещаются несколько экземпляров одного и того же виджета. Чтобы обеспечить такое поведение, вы не должны помещать в намерение дополнительный идентификатор виджета. Даже если вы включаете дополнительный идентификатор виджета, http://timelabs.ru/what-we-do/it-outsourcing.html то не должны делать намерение уникальным, сбрасывая URI данных для этого намерения.
Поскольку вы реализовали конструктор и также написали код метода onCreate, можете инициализировать экземпляр класса в любом из этих мест.
Обратный вызов onDestroy
Сигнатура метода onDestroy показана ниже:
public void onDestroy
Это дополнение метода onCreate. Функционирование onDestroy требует особых пояснений.
Начнем с того факта, что объекты фабрик кешируются на основе намерений. Если на экране есть десять виджетов одного и того же типа, все они могут обслуживаться одним и тем же намерением (и, следовательно, той же самой службой и фабрикой). Таким образом, фабрику необходимо сохранить.
Для разрушения фабрики и удаления ее из кеша в Android применяется следующая логика.
. Определите идентификатор виджета, который удаляется, т.к. мы перетаскиваем виджет в корзину.
. Пройдитесь по всем намерениям (намерение может обслуживать несколько идентификаторов виджетов).
. Для каждого намерения удалите этот идентификатор виджета из его списка.
. Если намерение не имеет идентификаторов виджетов в данном процессе, уничтожьте объект фабрики.
Согласно этой логике, для улучшения показателей производительности лучше не передавать идентификатор виджета вместе с намерением службы и делать это намерение службы уникальным. В противном случае придется создавать излишние объекты фабрик.
Когда последний виджет определенного типа удален из домашней страницы, запускается onDestroy.
Обратный вызов getCount
Сигнатура метода getCount выглядит следующим образом:
public int getCount
Нужно будет возвращать общее количество элементов в данном списковом представлении. Этот метод очень похож на соответствующий метод для адаптеров списков, описанных .
Обратный вызов getViewAt
Сигнатура метода getViewAt такова:
public RemoteViews getViewAt(int position)
Этот метод отвечает за возврат удаленного представления, соответствующего указанной позиции в списковом представлении. Обычно в методе getViewAt будет загружаться компоновка, специфичная для типа удаленного представления в заданной позиции, и затем устанавливаться значения в этом удаленном представлении, используя позицию в качестве индикатора для загрузки соответствующих данных. В пример загрузки отдельной компоновки для элемента спискового представления.
Опубликовал Kest
February 14 2015 14:07:18 ·
0 Комментариев ·
3045 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.