एक नज़र में AppWidget को मैनेज और अपडेट करें

नीचे दिए गए सेक्शन में, 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 मिनट में.
  • ब्रॉडकास्ट के जवाब में विजेट अपडेट करें.

संसाधन