Aşağıdaki bölümlerde, GlanceAppWidget öğesini nasıl güncelleyeceğiniz ve durumunu nasıl yöneteceğiniz açıklanmaktadır.
GlanceAppWidget durumunu yönetme
Sağlanan GlanceAppWidget sınıfı, widget oluşturulduğunda veya güncelleme gerektiğinde örneklendirilir. Bu nedenle, durumsuz ve pasif olmalıdır.
Durum kavramı aşağıdaki gibi bölümlere ayrılabilir:
- Uygulama durumu: Widget'ın gerektirdiği uygulamanın durumu veya içeriği. Örneğin, kullanıcı tarafından tanımlanan kayıtlı hedeflerin listesi (yani veritabanı).
- Glance durumu: Yalnızca uygulama widget'ıyla alakalı olan ve uygulamanın durumunu değiştirmesi veya etkilemesi gerekmeyen belirli durum. Örneğin, widget'ta bir onay kutusu seçildi veya bir sayaç artırıldı.
Uygulama durumunu kullanma
Uygulama widget'ları pasif olmalıdır. Her uygulama, veri katmanını yönetmekten ve widget kullanıcı arayüzüne yansıtılan boşta, yükleniyor ve hata gibi durumları işlemekten sorumludur.
Örneğin, aşağıdaki kod, depo katmanındaki RAM önbelleğinden varış noktalarını alır, depolanan varış noktası listesini sağlar ve durumuna bağlı olarak farklı bir kullanıcı arayüzü gösterir:
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 widget'ı bilgilendirmek ve güncellemek uygulamanın sorumluluğundadır. Daha fazla bilgi için GlanceAppWidget'ı güncelleme başlıklı makaleyi inceleyin.
Şunu güncelle: GlanceAppWidget
GlanceAppWidget kullanarak widget içeriğinizin güncellenmesini isteyebilirsiniz. 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 birimlerine çevirir ve toplantıyı düzenleyen kullanıcıya gönderir. İçeriği güncellemek için Glance'in 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 değerlerini sağlayın:
MyAppWidget().update(context, glanceId)
glanceId değerini almak için GlanceAppWidgetManager değerini 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. suspend işlevleri oldukları için bunları ana iş parçacığı kapsamının dışında başlatmanızı öneririz. Aşağıdaki örnekte, CoroutineWorker içinde başlatılırlar:
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 fazla bilgi için Android'de Kotlin eş yordamları başlıklı makaleyi inceleyin.
Widget'lar ne zaman güncellenir?
Widget'ları hemen veya düzenli olarak güncelleyebilirsiniz.
Uygulamanız uyanıkken widget'ınız hemen güncellenebilir. Örneğin:
- Kullanıcı bir widget ile etkileşime girdiğinde bir işlem, lambda çağrısı veya etkinlik başlatma amacı tetiklenir.
- Kullanıcınız uygulamanızla ön planda etkileşimde bulunduğunda veya uygulama bir Firebase Cloud Messaging (FCM) mesajına ya da yayınına yanıt olarak güncellenirken.
Bu gibi durumlarda, bu kılavuzda açıklandığı şekilde update yöntemini çağırın.
Uygulamanız etkin değilken widget'ınız düzenli olarak güncellenebilir. Örneğin:
- Widget'ı 30 dakikada bir güncellemek için
updatePeriodMilliskullanın. - Daha sık (ör. 15 dakikada bir) güncelleme planlamak için
WorkManagerkullanın. - Bir yayına yanıt olarak widget'ı güncelleyin.