एक नज़र में 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
            }
        }
    }
}

जब भी स्थिति या डेटा में बदलाव होता है, तो सूचित करना ऐप्लिकेशन की ज़िम्मेदारी है और विजेट को अपडेट करें. ज़्यादा जानकारी के लिए, झलकAppWidget अपडेट करें देखें.

GlanceAppWidget को अपडेट करें

जैसा कि GlanceAppWidget की स्थिति मैनेज करें सेक्शन में बताया गया है, ऐप्लिकेशन विजेट किसी दूसरी प्रोसेस में होस्ट किए जाते हैं. एक नज़र में जानकारी दिखाने की सुविधा, कॉन्टेंट को असल RemoteViews शामिल करता है और उन्हें होस्ट को भेजता है. कॉन्टेंट अपडेट करने के लिए, एक नज़र में जानकारी देखने की सुविधा को 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 कोरूटीन देखें.