Aşağıdaki bölümlerde GlanceAppWidget öğesinin nasıl güncelleneceği ve durumunun nasıl yönetileceği 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, durum bilgisiz ve pasif olmalıdır.
Durum kavramı aşağıdaki gibi bölümlere ayrılabilir:
- Uygulama durumu: Widget'ın gerektirdiği uygulama durumu veya içeriği. Örneğin, kullanıcı tarafından tanımlanan depolanmış hedeflerin listesi (yani veritabanı).
- Glance durumu: Yalnızca uygulama widget'ı için geçerli olan ve uygulamanın durumunu değiştirmeyen veya etkilemeyen belirli durum. Örneğin, widget'ta bir onay kutusu seçildi veya 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ünde yansıtılan boşta, yükleniyor ve hata gibi durumları işlemden sorumludur.
Örneğin, aşağıdaki kod, hedefleri depo katmanındaki bellek içi önbellekten alır, depolanan hedef 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 her değiştiğinde widget'ı bilgilendirmek ve güncellemek uygulamanın sorumluluğundadır. Daha fazla bilgi için Update GlanceAppWidget (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 süreçte barındırılır. Glance, içeriği gerçek RemoteViews olarak çevirir ve toplantıyı düzenleyene gönderir. İçeriği güncellemek için Glance'in RemoteViews öğelerini yeniden oluşturup tekrar göndermesi gerekir.
Güncellemeyi göndermek için update yöntemini GlanceAppWidget örneğinde çağırın, context ve glanceId değerlerini sağlayın:
MyAppWidget().update(context, glanceId)
glanceId almak için GlanceAppWidgetManager sorgusunu gönderin:
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 kullanın:
// 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ından bunları ana iş parçacığı kapsamı dışında başlatmanızı öneririz. Aşağıdaki örnekte, bunlar CoroutineWorker içinde başlatılı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 fazla bilgi için Android'de Kotlin eş yordamları konusuna bakın.
Widget'ları ne zaman güncellemelisiniz?
Widget'ları hemen veya düzenli olarak güncelleyin.
Uygulamanız etkin olduğunda widget'ınız hemen güncellenebilir. Örneğin:
- Kullanıcı bir widget ile etkileşime geçtiğinde bir işlem, lambda çağrısı veya etkinliği başlatma niyeti tetiklenir.
- Kullanıcınız uygulamanızla ön planda etkileşim kurduğunda veya uygulama, Firebase Cloud Messaging (FCM) mesajına ya da bir yayın mesajına yanıt olarak zaten güncellenirken.
Bu gibi durumlarda, bu rehberde açıklandığı şekilde update yöntemini çağırın.
Uygulamanız açık değilken widget'ınız periyodik olarak güncellenebilir. Örneğin:
- Widget'ı 30 dakikada bir kez güncellemek için
updatePeriodMillissimgesini kullanın. - 15 dakikada bir gibi daha sık güncellemeler planlamak için
WorkManagerözelliğini kullanın. - Yayınlara yanıt olarak widget'ı güncelleme
Kaynaklar
- Glance ile widget oluşturma (Codelab)
- Building for the Future of Android: Widgets chapter (Video) [Android'in Geleceği İçin Uygulama Geliştirme: Widget'lar Bölümü]