इन सेक्शन में, 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 कोरूटीन देखें.