इस सेक्शन में, GlanceAppWidget को अपडेट करने और उसकी स्थिति मैनेज करने का तरीका बताया गया है.
GlanceAppWidget की स्थिति मैनेज करना
जब भी विजेट बनाया जाता है या उसे अपडेट करने की ज़रूरत होती है, तब दी गई GlanceAppWidget क्लास का इंस्टेंस बनाया जाता है. इसलिए, यह स्टेटलेस और पैसिव होना चाहिए.
स्थिति की अवधारणा को इन हिस्सों में बांटा जा सकता है:
- ऐप्लिकेशन की स्थिति: ऐप्लिकेशन की वह स्थिति या कॉन्टेंट जिसकी ज़रूरत विजेट को होती है. उदाहरण के लिए, उपयोगकर्ता की ओर से सेव की गई मंज़िलों की सूची (यानी, डेटाबेस).
- Glance की स्थिति: यह खास स्थिति सिर्फ़ ऐप्लिकेशन विजेट से जुड़ी होती है और इससे ऐप्लिकेशन की स्थिति में बदलाव नहीं होता या इस पर कोई असर नहीं पड़ता. उदाहरण के लिए, विजेट में कोई चेकबॉक्स चुना गया हो या काउंटर की वैल्यू बढ़ गई हो.
ऐप्लिकेशन की स्थिति का इस्तेमाल करना
ऐप्लिकेशन विजेट पैसिव होने चाहिए. हर ऐप्लिकेशन, डेटा लेयर को मैनेज करने और स्थितियों को हैंडल करने के लिए ज़िम्मेदार होता है. जैसे, विजेट के यूज़र इंटरफ़ेस (यूआई) में दिखने वाली निष्क्रिय, लोड हो रही है, और गड़बड़ी वाली स्थितियां.
उदाहरण के लिए, यहां दिया गया कोड, रिपॉज़िटरी लेयर से इन-मेमोरी कैश से मंज़िलें वापस लाता है, सेव की गई मंज़िलों की सूची दिखाता है, और अपनी स्थिति के हिसाब से अलग-अलग यूज़र इंटरफ़ेस (यूआई) दिखाता है:
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 क्लाउड से मैसेज (FCM) के मैसेज या ब्रॉडकास्ट के जवाब में पहले से ही अपडेट हो रहा हो.
इन मामलों में, इस गाइड में बताए गए तरीके से update तरीके को कॉल करें.
जब आपका ऐप्लिकेशन चालू न हो, तब आपका विजेट समय-समय पर अपडेट हो सकता है. उदाहरण के लिए:
updatePeriodMillisका इस्तेमाल करके, विजेट को हर 30 मिनट में एक बार अपडेट करें.- ज़्यादा बार अपडेट करने के लिए,
WorkManagerका इस्तेमाल करें. जैसे, हर 15 मिनट में अपडेट करना. - ब्रॉडकास्ट के जवाब में विजेट को अपडेट करें.