Aşağıdaki bölümlerde, GlanceAppWidget
hizmetinin nasıl güncelleneceği ve yönetileceği anlatılmaktadır.
durumu.
GlanceAppWidget
durumunu yönet
Sağlanan GlanceAppWidget
sınıfı, widget her yapıldığında örneklenir.
oluşturulmalı veya bir güncelleme gerektirdiğinden durum bilgisiz ve pasif olmalıdır.
Devlet kavramı aşağıdaki bölümlere ayrılabilir:
- Uygulama durumu: widget'ını tıklayın. Örneğin, gösterir.
- Bir bakışta durumu: Yalnızca uygulama widget'ıyla alakalı olan belirli bir durum. ve uygulamanın durumunu değiştirmez veya etkilemesi gerekmez. Örneğin, widget'ta onay kutusu işaretlendi veya sayaç artırıldı.
Uygulama durumunu kullan
Uygulama widget'ları pasif olmalıdır. Her uygulama, veri katmanına ve boşta kalma, yükleniyor ve hata yansıtma gibi durumları ele alma widget'ı kullanıcı arayüzünde görebilirsiniz.
Örneğin, aşağıdaki kod bellek içi öğeden hedefleri alır önbelleğine alır, depolanan hedeflerin listesini sağlar ve durumuna bağlı olarak farklı bir kullanıcı arayüzü görüntüler:
class DestinationAppWidget : GlanceAppWidget() { // ... @Composable fun MyContent() { val repository = remember { DestinationsRepository.getInstance() } // Retrieve the cache data everytime the content is refreshed val destinations by repository.destinations.collectAsState(State.Loading) when (destinations) { is State.Loading -> { // show loading content } is State.Error -> { // show widget error content } is State.Completed -> { // show the list of destinations } } } }
Durum veya veriler değiştiğinde, bunu bildirmek uygulamanın sorumluluğundadır widget'ı güncelleyin. Daha fazla bilgi için GlanceAppWidget'ı güncelleme bölümüne bakın.
GlanceAppWidget
uygulamasını güncelle
GlanceAppWidget
durumunu yönetme bölümünde açıklandığı gibi, uygulama
widget'lar farklı bir işlemde barındırılır. Glance, içeriği
gerçek RemoteViews
olarak tanımlar ve bunları ana makineye gönderir. İçeriği güncellemek için Glance
RemoteViews
öğesini yeniden oluşturup tekrar göndermesi gerekir.
Güncellemeyi göndermek için GlanceAppWidget
örneğinin update
yöntemini çağırın.
context
ve glanceId
sağlar:
MyAppWidget().update(context, glanceId)
glanceId
öğesini almak için GlanceAppWidgetManager
öğesini sorgulayın:
val manager = GlanceAppWidgetManager(context) val widget = GlanceSizeModeWidget() val glanceIds = manager.getGlanceIds(widget.javaClass) glanceIds.forEach { glanceId -> widget.update(context, glanceId) }
Alternatif olarak GlanceAppWidget update
uzantılarından birini kullanabilirsiniz:
// Updates all placed instances of MyAppWidget MyAppWidget().updateAll(context) // Iterate over all placed instances of MyAppWidget and update if the state of // the instance matches the given predicate MyAppWidget().updateIf<State>(context) { state -> state == State.Completed }
Bu yöntemler, uygulamanızın herhangi bir bölümünden çağrılabilir. Çünkü
suspend
işlev, bunları ana iş parçacığının dışında başlatmanızı öneririz
kapsam. Aşağıdaki örnekte bunlar CoroutineWorker
içinde başlatılmıştır:
class DataSyncWorker( val context: Context, val params: WorkerParameters, ) : CoroutineWorker(context, params) { override suspend fun doWork(): Result { // Fetch data or do some work and then update all instance of your widget MyAppWidget().updateAll(context) return Result.success() } }
Eş yordamlar hakkında daha ayrıntılı bilgi için Android'de Kotlin Eşdeğerleri konusuna bakın.