नीचे दिए गए सेक्शन में, GlanceAppWidget
को अपडेट करने और उसकी स्थिति को मैनेज करने का तरीका बताया गया है.
GlanceAppWidget
की स्थिति मैनेज करना
दी गई GlanceAppWidget
क्लास को तब इंस्टैंशिएट किया जाता है, जब विजेट बनाया जाता है या उसे अपडेट करने की ज़रूरत होती है. इसलिए, यह स्टेटलेस और पैसिव होनी चाहिए.
स्टेटस के कॉन्सेप्ट को इनमें बांटा जा सकता है:
- ऐप्लिकेशन का स्टेटस: ऐप्लिकेशन का वह स्टेटस या कॉन्टेंट जो विजेट के लिए ज़रूरी है. उदाहरण के लिए, उपयोगकर्ता के तय किए गए सेव किए गए डेस्टिनेशन (जैसे, डेटाबेस) की सूची.
- एक नज़र में जानकारी देखने की सुविधा की स्थिति: यह खास स्थिति सिर्फ़ ऐप्लिकेशन विजेट के लिए काम की होती है. साथ ही, ज़रूरी नहीं है कि इससे ऐप्लिकेशन की स्थिति में बदलाव हो या उस पर असर पड़े. उदाहरण के लिए, विजेट में कोई चेकबॉक्स चुना गया था या काउंटर की संख्या बढ़ाई गई थी.
ऐप्लिकेशन स्टेटस का इस्तेमाल करना
ऐप्लिकेशन विजेट पैसिव होने चाहिए. हर ऐप्लिकेशन, डेटा लेयर को मैनेज करने और विजेट के यूज़र इंटरफ़ेस (यूआई) में दिखने वाली गड़बड़ी, लोड होने की स्थिति, और आइडल जैसी स्थितियों को मैनेज करने के लिए ज़िम्मेदार होता है.
उदाहरण के लिए, यह कोड, डेटा स्टोर करने वाली लेयर में मौजूद मेमोरी कैश मेमोरी से डेस्टिनेशन को वापस लाता है. साथ ही, डेस्टिनेशन की सेव की गई सूची उपलब्ध कराता है और उसकी स्थिति के हिसाब से अलग-अलग यूज़र इंटरफ़ेस (यूआई) दिखाता है:
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 } } } }
जब भी स्टेटस या डेटा में बदलाव होता है, तो ऐप्लिकेशन की ज़िम्मेदारी होती है कि वह विजेट को अपडेट करे और इसकी सूचना दे. ज़्यादा जानकारी के लिए, GlanceAppWidget को अपडेट करना देखें.
GlanceAppWidget
को अपडेट करें
GlanceAppWidget
का इस्तेमाल करके, विजेट के कॉन्टेंट को अपडेट करने का अनुरोध किया जा सकता है. GlanceAppWidget
की स्थिति मैनेज करें सेक्शन में बताया गया है कि ऐप्लिकेशन विजेट, अलग प्रोसेस में होस्ट किए जाते हैं. Glance, कॉन्टेंट को असल RemoteViews
में बदलकर होस्ट को भेजता है. कॉन्टेंट अपडेट करने के लिए, Glance को RemoteViews
फिर से बनाना होगा और उन्हें फिर से भेजना होगा.
अपडेट भेजने के लिए, GlanceAppWidget
इंस्टेंस के update
तरीके को कॉल करें. इसके लिए, context
और glanceId
दें:
MyAppWidget().update(context, glanceId)
glanceId
पाने के लिए, GlanceAppWidgetManager
से क्वेरी करें:
val manager = GlanceAppWidgetManager(context) val widget = GlanceSizeModeWidget() val glanceIds = manager.getGlanceIds(widget.javaClass) glanceIds.forEach { glanceId -> widget.update(context, glanceId) }
इसके अलावा, GlanceAppWidget update
एक्सटेंशन में से किसी एक का इस्तेमाल करें:
// 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 }
इन तरीकों को आपके ऐप्लिकेशन के किसी भी हिस्से से कॉल किया जा सकता है. ये suspend
फ़ंक्शन हैं. इसलिए, हमारा सुझाव है कि इन्हें मुख्य थ्रेड के दायरे से बाहर लॉन्च करें. यहां दिए गए उदाहरण में, उन्हें CoroutineWorker
में लॉन्च किया गया है:
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() } }
कोरूटीन के बारे में ज़्यादा जानकारी के लिए, Android पर Kotlin कोरूटीन देखें.
विजेट कब अपडेट करें
विजेट को तुरंत या समय-समय पर अपडेट करें.
ऐप्लिकेशन चालू होने पर, आपका विजेट तुरंत अपडेट हो सकता है. उदाहरण के लिए:
- जब कोई उपयोगकर्ता किसी विजेट से इंटरैक्ट करता है, तो किसी कार्रवाई, लैम्ब्डा कॉल या किसी गतिविधि को लॉन्च करने के लिए इंटेंट को ट्रिगर करता है.
- जब आपका उपयोगकर्ता फ़ोरग्राउंड में आपके ऐप्लिकेशन के साथ इंटरैक्ट करता है या जब ऐप्लिकेशन, Firebase Cloud Messaging (FCM) मैसेज या ब्रॉडकास्ट के जवाब में पहले से ही अपडेट हो रहा हो.
ऐसे मामलों में, इस गाइड में बताए गए तरीके के मुताबिक update
का इस्तेमाल करें.
जब आपका ऐप्लिकेशन चालू नहीं होता, तब आपका विजेट समय-समय पर अपडेट हो सकता है. उदाहरण के लिए:
- विजेट को हर 30 मिनट में अपडेट करने के लिए,
updatePeriodMillis
का इस्तेमाल करें. - ज़्यादा बार अपडेट शेड्यूल करने के लिए,
WorkManager
का इस्तेमाल करें. जैसे, हर 15 मिनट में. - ब्रॉडकास्ट के जवाब में विजेट अपडेट करें.
संसाधन
- एक नज़र में जानकारी देखने की सुविधा का इस्तेमाल करके विजेट बनाना (कोडलैब)
- Android के भविष्य को बेहतर बनाना: विजेट चैप्टर (वीडियो)