Android. Программирование для профессионалов. 4-е издание


private val onThumbnailDownloaded: (T



Download 21,53 Mb.
Pdf ko'rish
bet417/485
Sana13.07.2022
Hajmi21,53 Mb.
#787165
1   ...   413   414   415   416   417   418   419   420   ...   485
Bog'liq
Android Programmirovanie dlya professionalov 4-e izdanie 2020 Fillips Styuart Marsikano Gardner

private val onThumbnailDownloaded: (T,
Bitmap) -> Unit
) : HandlerThread(TAG), LifecycleObserver {
...
}
Свойство типа функции, определенное в новом
конструкторе, будет рано или поздно использовано, когда
полностью загруженное изображение появится в интерфейсе.
Использование слушателя передает ответственность за
обработку загруженного изображения другому классу, а не
ThumbnailDownloader
(в 
данном 
случае
PhotoGalleryFragment
). Тем самым задача загрузки
отделяется 
от 
задачи 
обновления 
пользовательского
интерфейса (связывания изображений с 
ImageView
), чтобы
класс 
ThumbnailDownloader
при необходимости мог
использоваться для загрузки данных других разновидностей
объектов 
View
.
Затем измените класс 
PhotoGalleryFragment
так, чтобы
он передавал классу 
ThumbnailDownloader
объект 
Handler
,
присоединенный к главному потоку. Также назначьте
анонимную функцию для обработки загруженного изображения
после завершения загрузки.
Листинг 25.17. Подключение к обработчику ответа
(PhotoGalleryFragment.kt)
class PhotoGalleryFragment : Fragment() {
...


override fun onCreate(savedInstanceState:
Bundle?) {
...
thumbnailDownloader =
ThumbnailDownloader()
val responseHandler = Handler()
thumbnailDownloader =
ThumbnailDownloader(responseHan
dler) { photoHolder, bitmap ->
val drawable =
BitmapDrawable(resources, bitmap)
photoHolder.bindDrawable(dr
awable)
}
lifecycle.addObserver(thumbnailDownload
er)
}
...
}
Вспомните, что по умолчанию 
Handler
присоединяется к
объекту 
Looper
для текущего потока. Поскольку объект
Handler
создан в 
onCreate(...)
, он будет присоединен к
объекту 
Looper
главного потока.
Теперь 
ThumbnailDownloader
имеет доступ к экземпляру
Handler
, связанному с экземпляром 
Looper
главного потока,
через поле 
responseHandler
. В нем также есть реализация
типа функции для реализации интерфейса при возврате
Bitmap. В частности, функция, переданная в функцию высшего
порядка 
onThumbnailDownloaded
, устанавливает 
Drawable
запрошенного 
PhotoHolder
на только что загруженный
Bitmap
.


Аналогичным образом можно отправить главному потоку
нестандартный объект 
Messsage
, запрашивающий добавление
изображения в пользовательский интерфейс, по аналогии с
тем, как мы ставили в очередь запрос к фоновому потоку на
загрузку изображения. Для этого потребуется другой подкласс
Handler
с переопределением функции 
handleMessage(...)
.
Однако вместо этого мы используем другую удобную
функцию 
Handler
— 
post (Runnable)
.
Handler.post(Runnable)—
вспомогательная функция для
отправки сообщений следующего вида:
var myRunnable: Runnable = object : Runnable {
override fun run() {
// Здесь ваш код
}
}
var msg: Message = Message.obtain(someHandler,
myRunnable)
// Устанавливает msg.callback в myRunnable
Если у 
Message
задано поле 
callback
, то вместо передачи
приемнику 
Handler
при извлечении из очереди сообщений
выполняется объект 
Runnable
из поля 
callback
. В функции
ThumbnailDownloader.handleRequest()
запишите
Runnable
в очередь основного потока через 
responseHandler
(листинг 25.18).

Download 21,53 Mb.

Do'stlaringiz bilan baham:
1   ...   413   414   415   416   417   418   419   420   ...   485




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish