Compose रनटाइम
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(सभी compose पैकेज के लिए एपीआई रेफ़रंस दस्तावेज़ देखें)
नया अपडेट | रिलीज़ किया गया जांचा और परखा हुआ वर्शन | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
---|---|---|---|---|
11 दिसंबर, 2024 | 1.7.6 | - | - | 1.8.0-alpha07 |
संरचना
Compose, androidx
में सात Maven ग्रुप आईडी का कॉम्बिनेशन है. हर ग्रुप में, सुविधाओं का एक टारगेट किया गया सबसेट होता है. साथ ही, हर ग्रुप के लिए रिलीज़ नोट का अपना सेट होता है.
इस टेबल में, रिलीज़ नोट के हर सेट के ग्रुप और लिंक के बारे में बताया गया है.
ग्रुप | ब्यौरा |
---|---|
compose.animation | उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, अपने Jetpack Compose ऐप्लिकेशन में ऐनिमेशन बनाएं. |
compose.compiler | @Composable फ़ंक्शन को बदलें और Kotlin कंपाइलर प्लग इन की मदद से ऑप्टिमाइज़ेशन चालू करें. |
compose.foundation | इस्तेमाल के लिए तैयार बिल्डिंग ब्लॉक की मदद से, Jetpack Compose ऐप्लिकेशन लिखें. साथ ही, अपना डिज़ाइन सिस्टम बनाने के लिए फ़ाउंडेशन को बढ़ाएं. |
compose.material | इस्तेमाल के लिए तैयार Material Design कॉम्पोनेंट की मदद से, Jetpack Compose यूज़र इंटरफ़ेस (यूआई) बनाएं. यह Compose का सबसे ऊपरी लेवल का एंट्री पॉइंट है. इसे ऐसे कॉम्पोनेंट उपलब्ध कराने के लिए डिज़ाइन किया गया है जो www.material.io पर बताए गए कॉम्पोनेंट से मेल खाते हैं. |
compose.material3 | मटीरियल डिज़ाइन के अगले वर्शन, Material Design 3 कॉम्पोनेंट की मदद से, Jetpack Compose यूज़र इंटरफ़ेस (यूआई) बनाएं. Material 3 में, अपडेट की गई थीम और कॉम्पोनेंट के साथ-साथ, Material You की डाइनैमिक कलर जैसी सुविधाएं शामिल हैं. इसे Android 12 के नए विज़ुअल स्टाइल और सिस्टम यूज़र इंटरफ़ेस (यूआई) के साथ काम करने के लिए डिज़ाइन किया गया है. |
compose.runtime | Compose के प्रोग्रामिंग मॉडल और स्टेटस मैनेजमेंट के बुनियादी बिल्डिंग ब्लॉक. साथ ही, Compose कंपाइलर प्लग इन को टारगेट करने के लिए कोर रनटाइम. |
compose.ui | डिवाइस के साथ इंटरैक्ट करने के लिए, कॉम्पोज़ यूज़र इंटरफ़ेस (यूआई) के बुनियादी कॉम्पोनेंट ज़रूरी हैं. इनमें लेआउट, ड्रॉइंग, और इनपुट शामिल हैं. |
डिपेंडेंसी का एलान करना
Compose पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle
फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.7.5" implementation "androidx.compose.runtime:runtime-livedata:1.7.5" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.5" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.5") implementation("androidx.compose.runtime:runtime-livedata:1.7.5") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.5") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव
आपके सुझाव, शिकायत या राय से हमें Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. नई लाइब्रेरी बनाने से पहले, कृपया इस लाइब्रेरी में मौजूद मौजूदा समस्याओं पर एक नज़र डालें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या पर अपना वोट जोड़ा जा सकता है.
ज़्यादा जानकारी के लिए, समस्या ट्रैकर का दस्तावेज़ देखें.
रनटाइम ट्रैकिंग का वर्शन 1.7
वर्शन 1.7.0-rc01
18 सितंबर, 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
रिलीज़ हो गया है. वर्शन 1.7.0-rc01 में ये कमिट शामिल हैं.
रनटाइम ट्रैकिंग का वर्शन 1.0
वर्शन 1.0.0-beta01
29 नवंबर, 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
रिलीज़ हो गया है. 1.0.0-beta01 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.0.0-alpha05
15 नवंबर, 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
रिलीज़ हो गया है. 1.0.0-alpha05 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- डिपेंडेंसी को, काम करने वाले सबसे पुराने वर्शन (जैसे, compose-runtime और tracing-perfetto) पर पिन किया गया - इससे उस समस्या को ठीक किया गया है जिसमें compose-runtime-tracing, ऐप्लिकेशन में compose-runtime का नया वर्शन लाता था.
वर्शन 1.0.0-alpha04
23 अगस्त, 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
रिलीज़ हो गया है. 1.0.0-alpha04 वर्शन में ये कमिट शामिल हैं.
नई सुविधाएं
- यह बेंचमार्क और Tracing Perfetto के नए वर्शन के साथ काम करता है.इससे ऐप्लिकेशन के शुरू होने (कोल्ड स्टार्ट) पर, कॉम्पोज़िशन ट्रैकिंग की सुविधा चालू होती है. जैसे, AndroidX बेंचमार्क और Android Studio (Hedgehog Beta 2 से शुरू).
एपीआई में हुए बदलाव
androidx.tracing.perfetto.Trace
का नाम बदलकरandroidx.tracing.perfetto.PerfettoSdkTrace
किया गया. (I44af8)- Perfetto SDK टूल के ट्रैकिंग एपीआई को
android.os.Trace
के मुताबिक बनाना. (I73ba0, b/282199917) - ऐप्लिकेशन के स्टार्टअप के समय ट्रैकिंग की सुविधा इस्तेमाल करने से जुड़ी ज़रूरी शर्तें. (Iad890)
- एक्सपेरिमेंटल और सार्वजनिक एपीआई फ़ाइलों को मर्ज किया गया (I0f2e1, b/278769092)
वर्शन 1.0.0-alpha02
8 फ़रवरी, 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
रिलीज़ हो गया है. 1.0.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- इसमें कोई बदलाव नहीं किया गया है. डाउनस्ट्रीम डिपेंडेंसी
androidx.tracing:tracing-perfetto*
में परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के कई तरीके.
वर्शन 1.0.0-alpha01
7 सितंबर, 2022
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
रिलीज़ हो गया है. 1.0.0-alpha01 वर्शन में ये कमिट शामिल हैं.
नई सुविधाएं
androidx.compose.runtime:runtime-tracing
एक लाइब्रेरी है, जो Compose ऐप्लिकेशन में ज़्यादा ट्रैकिंग की सुविधा देती है. हालांकि, इसके लिए ज़रूरी है कि इसके साथ काम करने वाले टूल उपलब्ध हों. ये टूल जल्द ही उपलब्ध होंगे. इस लाइब्रेरी की शुरुआती रिलीज़ 1.0.0-alpha01 है.
वर्शन 1.8
वर्शन 1.8.0-alpha07
11 दिसंबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha07
रिलीज़ हो गया है. वर्शन 1.8.0-alpha07 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- टूलिंग एपीआई जोड़ा गया है. इससे लेआउट इंस्पेक्टर को, उन मामलों में सब-कंपोज़िशन को पैरंट कंपोज़िशन से जोड़ने में मदद मिलती है जहां कंपोज़िशन को एक साथ जोड़ने के लिए किसी नोड का इस्तेमाल नहीं किया जाता. (I4ce3d)
SnapshotId
के लिए, अंकगणित और खास कॉन्स्टेंट को सार्वजनिक के बजाय इंटरनल बनाया. अगर ज़रूरी हो, तोSnasphotId
पर अंकगणित की कार्रवाई की जा सकती है. इसके लिए,toInt()
याtoLong()
का इस्तेमाल करके,SnasphotId
कोInt
याLong
में बदलें. (Ic3a57)
बाहरी योगदान
movableContentOf
पैरामीटर के लिए स्टोरेज ऑप्टिमाइज़ करें. (ed87177)
वर्शन 1.8.0-alpha06
13 नवंबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06
रिलीज़ हो गया है. वर्शन 1.8.0-alpha06 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
PausableComposition
API में बदलाव. ये बदलाव, 1.8.0-alpha (1.8.0-alpha02 से) की पिछली रिलीज़ के मुकाबले किए गए हैं. हालांकि, ये 1.8.0 में नए एपीआई हैं. इसलिए, एपीआई अब भी अल्फा वर्शन में हैं और पुराने सिस्टम के साथ काम नहीं करते. (I39819)- Recomposer (Iaeb7e) में नई कंपोजिशन बनाने की प्रोसेस को मॉनिटर करने के लिए, टूलिंग एपीआई जोड़े गए
Snapshot
मेंLong
टाइप काsnapshotId
जोड़ा गया औरid
को हटा दिया गया. बहुत ज़्यादा फ़्रेम रेट और लंबे समय तक चलने वाले ऐनिमेशन वाले सिस्टम पर, स्नैपशॉट आईडी के ओवरफ़्लो होने से बचने के लिए, स्नैपशॉट का आईडीInt
से बदलकरLong
कर दिया गया है. टाइप को expect/actual बनाया गया था, ताकि इस टाइप को उन प्लैटफ़ॉर्म परInt
या अन्य टाइप के तौर पर इस्तेमाल किया जा सके जिनमें नेटिवLong
टाइप नहीं है. जिन प्लैटफ़ॉर्म में JavaScript जैसा कोई नेटिवLong
नहीं है उन्हें ज़्यादा फ़्रेम रेट (1,000 एफ़पीएस से ज़्यादा) से बचना चाहिए. इससे हर 24 दिन मेंInt
के लिए ओवरफ़्लो होगा. (I38ac3, b/374821679)
गड़बड़ियां ठीक की गईं
- एक
provides
के लिएprovidesDefault
को ठीक किया गया. (aosp/3318540 b/374263387) ChangeList
को ऑप्टिमाइज़ करें. (3318538)
वर्शन 1.8.0-alpha05
30 अक्टूबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha05
रिलीज़ हो गया है. वर्शन 1.8.0-alpha05 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
Int.MAX_VALUE
कोSnapshotIdSet
में जोड़कर, स्टैक ओवरफ़्लो की समस्या ठीक करें. (b/370536104, Ic4179f6)- रनटाइम माइक्रो-ऑप्टिमाइज़ेशन (I50c60)
- R8 को डीबगिंग के लिए runtimeCheck कॉल हटाने की अनुमति दें (I8c44)
compoundKeyOf
को बार-बार होने वाली कार्रवाई के बजाय, बार-बार होने वाली कार्रवाई के तौर पर सेट करें (I5817f)
बाहरी योगदान
- कलेक्शन की सूचियों के साथ स्टैक लागू करना (I7d47c)
वर्शन 1.8.0-alpha04
16 अक्टूबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04
रिलीज़ हो गया है. वर्शन 1.8.0-alpha04 में ये कमिट शामिल हैं.
परफ़ॉर्मेंस में सुधार
- कन्स्ट्रक्टर (85c00f) में स्टेटस रिकॉर्ड के लिए स्नैपशॉट आईडी दें
- क्लास की पुष्टि से जुड़ी गड़बड़ियों से बचने के लिए,
SnapshotState***
को फिर से लिखें (6ee4a6) - throw इनलाइन होने से रोकने के लिए, R8 नियमों को ठीक करें (5beb92)
- ऑपरेशन को माइक्रो-ऑप्टिमाइज़ करना (d73c5c)
- JVM पर
SynchronizedObject
एलोकेशन को ऑप्टिमाइज़ करना (2b043f)
वर्शन 1.8.0-alpha03
2 अक्टूबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha03
रिलीज़ हो गया है. वर्शन 1.8.0-alpha03 में ये कमिट शामिल हैं.
परफ़ॉर्मेंस में सुधार
rememberCoroutineScope
(f61464) के लिए, धीरे-धीरे चाइल्ड कॉन्टेक्स्ट बनाएंrememberCoroutineScope
का इस्तेमाल, आम तौर पर कॉम्पोज़िशन के बाद होने वाले इवेंट के जवाब में कोरूटीन लॉन्च करने के लिए किया जाता है. कुछ मामलों में, ये इवेंट कभी नहीं हो सकते. इससे, नौकरी बनाने और रद्द करने की अतिरिक्त लागत का कोई फ़ायदा नहीं मिलता.rememberCoroutineScope
से मिलने वाले स्कोप को, ऐक्सेस किए जाने पर अपनाcoroutineContext
लाज़ीली बनाएं. इससे, अगर स्कोप का कभी इस्तेमाल नहीं किया जाता है, तो जॉब बनाने और रद्द करने की प्रोसेस पूरी तरह से बच जाती है.
वर्शन 1.8.0-alpha02
18 सितंबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02
रिलीज़ हो गया है. वर्शन 1.8.0-alpha02 में ये कमिट शामिल हैं.
नई सुविधाएं
PausableComposition
जोड़ा गया, जिससे एक सब-कंपोज़िशन बनाया जा सकता है. इसे कंपोज़िशन के दौरान रोका जा सकता है और कंपोज़िशन पर अलग से लागू किया जा सकता है. फ़िलहाल, प्रोसेस को रोकने के लिए कंपाइलर की सहायता की ज़रूरत होती है. (I3394b)
वर्शन 1.8.0-alpha01
4 सितंबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha01
रिलीज़ हो गया है. वर्शन 1.8.0-alpha01 में ये कमिट शामिल हैं.
वर्शन 1.7
वर्शन 1.7.6
11 दिसंबर, 2024
androidx.compose.runtime:runtime-*:1.7.6
रिलीज़ हो गया है. वर्शन 1.7.6 में ये बदलाव शामिल हैं.
वर्शन 1.7.5
30 अक्टूबर, 2024
androidx.compose.runtime:runtime-*:1.7.5
रिलीज़ हो गया है. वर्शन 1.7.5 में ये बदलाव शामिल हैं.
वर्शन 1.7.4
16 अक्टूबर, 2024
androidx.compose.runtime:runtime-*:1.7.4
रिलीज़ हो गया है. वर्शन 1.7.4 में ये बदलाव शामिल हैं.
वर्शन 1.7.3
2 अक्टूबर, 2024
androidx.compose.runtime:runtime-*:1.7.3
रिलीज़ हो गया है. वर्शन 1.7.3 में ये कमिट शामिल हैं.
वर्शन 1.7.2
18 सितंबर, 2024
androidx.compose.runtime:runtime-*:1.7.2
रिलीज़ हो गया है. वर्शन 1.7.2 में ये बदलाव शामिल हैं.
वर्शन 1.7.1
10 सितंबर, 2024
- Android आर्टफ़ैक्ट में कोई बदलाव नहीं किया गया है.
-desktop
आर्टफ़ैक्ट हटा दिए गए और-jvmStubs
और-linuxx64Stubs
आर्टफ़ैक्ट जोड़ दिए गए. इनमें से किसी भी टारगेट का इस्तेमाल नहीं किया जाना चाहिए. ये प्लेसहोल्डर हैं, ताकि Jetbrains Compose को काम करने में मदद मिल सके.
वर्शन 1.7.0
4 सितंबर, 2024
androidx.compose.runtime:runtime-*:1.7.0
रिलीज़ हो गया है. वर्शन 1.7.0 में ये कमिट शामिल हैं.
1.6.0 के बाद किए गए अहम बदलाव
- कॉम्पोज़िशन लोकल की वैल्यू, डिफ़ॉल्ट रूप से या
compositionLocalWithComputedDefault()
का इस्तेमाल करके, अन्य कॉम्पोज़िशन लोकल की वैल्यू के आधार पर कैलकुलेट की जा सकती है. इसके अलावा,provides
के बजायprovidesComputed
का इस्तेमाल करके, वैल्यू कैलकुलेट करने के लिए कोई लैम्ब्डा फ़ंक्शन भी दिया जा सकता है. - किसी कॉम्पोज़िशन लोकल की वैल्यू पाने के लिए, कॉम्पोज़िशन लोकल की
currentValue
प्रॉपर्टी का इस्तेमाल करें. यह प्रॉपर्टी, वैल्यू का हिसाब लगाने वाले लैम्ब्डा फ़ंक्शन में मौजूद होती है. इसका इस्तेमालcurrent
के बजाय किया जाता है, जो सिर्फ़@Composable
फ़ंक्शन में ऐक्सेस किया जा सकता है. (Iadbc0) - नए बनाए गए स्टेटस ऑब्जेक्ट, शुरुआती स्टेटस के साथ अन्य स्नैपशॉट से तुरंत ऐक्सेस किए जा सकते हैं. इनमें ग्लोबल स्नैपशॉट भी शामिल है. इसके बाद किए गए बदलाव तब तक नहीं दिखते, जब तक उस स्नैपशॉट को लागू नहीं किया जाता जिसमें ऑब्जेक्ट बनाया गया था.
mutableStateOf()
की शुरुआती स्थिति और उनके प्रिमिटिव वर्शन,mutableStateOf()
के लिए पैरामीटर के तौर पर पास की गई वैल्यू होती है.mutableStateListOf()
औरmutableStateMapOf()
की शुरुआती स्थिति खाली है.Snapshot.isInSnapshot
औरSnapshot.PreexistingSnapshotId
जोड़े गए हैं. इनका इस्तेमाल, स्टेटस ऑब्जेक्ट को बनाने के बाद, ग्लोबल स्नैपशॉट से तुरंत ऐक्सेस करने की सुविधा चालू करने के लिए किया जाता है.- कस्टम स्टेटस ऑब्जेक्ट, पहले से मौजूद स्नैपशॉट ऑब्जेक्ट में किए गए बदलावों के पैटर्न का पालन करके, तुरंत ऐक्सेस किए जा सकते हैं. (I84a17)
- लाइब्रेरी बनाने के लिए,
nonSkippingGroupOptimization
को चालू करें. इस वजह से, androidx में उन सभी कॉम्पोज़ेबल फ़ंक्शन के लिए जनरेट किया गया कोड ज़्यादा बेहतर होता है जिन्हें फिर से शुरू नहीं किया जा सकता. आने वाले समय में, हम इसे डिफ़ॉल्ट रूप से चालू करने की योजना बना रहे हैं. I(acbc08) - एक ही फ़्रेम पर सब-कंपोज़िशन में, कॉम्पोज़ेबल लैम्ब्डा को अमान्य करें. (98301c)
onForgotten
कॉलबैक फ़ंक्शन के क्रम में हीonRelease
कॉलबैक फ़ंक्शन को कॉल करें. (2cd790)- वीडियो को तेज़ी से स्किप करने की सुविधा चालू करना (ed1766)
currentCompoundHashKey
को ज़्यादा मामलों में यूनीक बनाएं (d4a872)
वर्शन 1.7.0-rc01
21 अगस्त, 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01
रिलीज़ हो गया है. वर्शन 1.7.0-rc01 में ये कमिट शामिल हैं.
वर्शन 1.7.0-beta07
7 अगस्त, 2024
androidx.compose.runtime:runtime-*:1.7.0-beta07
रिलीज़ हो गया है. वर्शन 1.7.0-beta07 में ये कमिट शामिल हैं.
वर्शन 1.7.0-beta06
24 जुलाई, 2024
androidx.compose.runtime:runtime-*:1.7.0-beta06
रिलीज़ हो गया है. वर्शन 1.7.0-beta06 में ये कमिट शामिल हैं.
वर्शन 1.7.0-beta05
10 जुलाई, 2024
androidx.compose.runtime:runtime-*:1.7.0-beta05
रिलीज़ हो गया है. वर्शन 1.7.0-beta05 में ये कमिट शामिल हैं.
वर्शन 1.7.0-beta04
26 जून, 2024
androidx.compose.runtime:runtime-*:1.7.0-beta04
रिलीज़ हो गया है. वर्शन 1.7.0-beta04 में ये कमिट शामिल हैं.
वर्शन 1.7.0-beta03
12 जून, 2024
androidx.compose.runtime:runtime-*:1.7.0-beta03
रिलीज़ हो गया है. वर्शन 1.7.0-beta03 में ये कमिट शामिल हैं.
वर्शन 1.7.0-beta02
29 मई, 2024
androidx.compose.runtime:runtime-*:1.7.0-beta02
रिलीज़ हो गया है. वर्शन 1.7.0-beta02 में ये कमिट शामिल हैं.
वर्शन 1.7.0-beta01
14 मई, 2024
androidx.compose.runtime:runtime-*:1.7.0-beta01
रिलीज़ हो गया है. वर्शन 1.7.0-beta01 में ये कमिट शामिल हैं.
वर्शन 1.7.0-alpha08
1 मई, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha08
रिलीज़ हो गया है. वर्शन 1.7.0-alpha08 में ये कमिट शामिल हैं.
वर्शन 1.7.0-alpha07
17 अप्रैल, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha07
रिलीज़ हो गया है. वर्शन 1.7.0-alpha07 में ये कमिट शामिल हैं.
नई सुविधाएं
- कॉम्पोज़िशन लोकल की वैल्यू, डिफ़ॉल्ट रूप से या
compositionLocalWithComputedDefault()
का इस्तेमाल करके, अन्य कॉम्पोज़िशन लोकल की वैल्यू के आधार पर कैलकुलेट की जा सकती है. इसके अलावा,provides
के बजायprovidesComputed
का इस्तेमाल करके, वैल्यू कैलकुलेट करने के लिए कोई लैंब्डा फ़ंक्शन भी दिया जा सकता है. - किसी कॉम्पोज़िशन लोकल की वैल्यू पाने के लिए, कॉम्पोज़िशन लोकल की
currentValue
प्रॉपर्टी का इस्तेमाल करें. यह प्रॉपर्टी, वैल्यू का हिसाब लगाने वाले लैम्ब्डा फ़ंक्शन में मौजूद होती है. इसका इस्तेमालcurrent
के बजाय किया जाता है, जो सिर्फ़@Composable
फ़ंक्शन में ऐक्सेस किया जा सकता है. (Iadbc0)
एपीआई में हुए बदलाव
- नए बनाए गए स्टेटस ऑब्जेक्ट, शुरुआती स्टेटस के साथ अन्य स्नैपशॉट से तुरंत ऐक्सेस किए जा सकते हैं. इनमें ग्लोबल स्नैपशॉट भी शामिल है. इसके बाद किए गए बदलाव तब तक नहीं दिखते, जब तक उस स्नैपशॉट को लागू नहीं किया जाता जिसमें ऑब्जेक्ट बनाया गया था.
mutableStateOf()
की शुरुआती स्थिति और उनके प्रिमिटिव वर्शन,mutableStateOf()
के लिए पैरामीटर के तौर पर पास की गई वैल्यू होती है.mutableStateListOf()
औरmutableStateMapOf()
की शुरुआती स्थिति खाली है.Snapshot.isInSnapshot
औरSnapshot.PreexistingSnapshotId
जोड़े गए हैं. इनका इस्तेमाल, स्टेटस ऑब्जेक्ट को बनाने के बाद, ग्लोबल स्नैपशॉट से तुरंत ऐक्सेस करने की सुविधा चालू करने के लिए किया जाता है.- कस्टम स्टेटस ऑब्जेक्ट, पहले से मौजूद स्नैपशॉट ऑब्जेक्ट में किए गए बदलावों के पैटर्न का पालन करके, तुरंत ऐक्सेस किए जा सकते हैं. (I84a17)
गड़बड़ियां ठीक की गईं
- नेस्ट किए गए स्नैपशॉट में
readObserver
को मर्ज करने की समस्या को ठीक किया गया. इस वजह से, नेस्ट किए गए डेरिव्ड स्टेटस कोsnapshotFlow
के अंदर इस्तेमाल करने पर, वे पूरी तरह अमान्य नहीं होते. (Idf138)
वर्शन 1.7.0-alpha06
3 अप्रैल, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06
रिलीज़ हो गया है. वर्शन 1.7.0-alpha06 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- एक वैल्यू देने की सुविधा को ठीक करना
providesDefault
(538f45) - फ़्रेम क्लॉक को ऐक्सेस करने वाले Recomposer में डेडलॉक से बचना (07e5c6)
वर्शन 1.7.0-alpha05
20 मार्च, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha05
रिलीज़ हो गया है. वर्शन 1.7.0-alpha05 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- बंद किए गए कंपोज़िशन में किए गए हाल ही के बदलावों को मिटाना (5950bc)
वर्शन 1.7.0-alpha04
6 मार्च, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha04
रिलीज़ हो गया है. वर्शन 1.7.0-alpha04 में ये कमिट शामिल हैं.
परफ़ॉर्मेंस में सुधार
Snapshot.current
को हर बार, स्टेटस के आकलन के लिए एक बार कॉल करें (ee7daf)- कंपोज़िशन (b882b2) में हर अवलोकन के लिए,
currentRecord
को एक बार पढ़ें snapshotFlow
में, गलती से असाइन किए गए आइटरेटर को हटाएं (231e56)- लाइब्रेरी बनाने के लिए,
nonSkippingGroupOptimization
को चालू करें. इस वजह से, androidx में उन सभी कॉम्पोज़ेबल फ़ंक्शन के लिए जनरेट किया गया कोड ज़्यादा बेहतर होता है जिन्हें फिर से शुरू नहीं किया जा सकता. आने वाले समय में, हम इसे डिफ़ॉल्ट रूप से चालू करने की योजना बना रहे हैं. I(acbc08)
वर्शन 1.7.0-alpha03
21 फ़रवरी, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03
रिलीज़ हो गया है. 1.7.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- बदलावों का पता लगाने की सुविधा को बेहतर बनाने के लिए, बदले गए ग्रुप की सुविधा जोड़ी गई है (0941b5)
परफ़ॉर्मेंस में सुधार
- बदलावों का पता लगाते समय, मेमोरी के बंटवारे को बेहतर बनाना (53e7fd)
- कंपोजर में मेमोरी लीक की समस्या को ठीक करना (0e097d)
- फिर से कॉम्पोज़ करते समय, अमान्य होने की जानकारी देने के लिए
ScopeMap
का इस्तेमाल करना (e19a7e) - अमान्य मानने से जुड़े मैप को ऑप्टिमाइज़ करें, ताकि सिर्फ़ व्युत्पन्न किए गए स्टेटस ही सेव किए जाएं (f11c44)
IdentityArraySet
के इस्तेमाल कोScatterSet
से बदलें (db572e)ScopeMap
मेंremoveScope
को ऑप्टिमाइज़ करना (bb0530)
वर्शन 1.7.0-alpha02
7 फ़रवरी, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02
रिलीज़ हो गया है. 1.7.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- एक ही फ़्रेम पर सब-कंपोज़िशन में, कॉम्पोज़ेबल लैम्ब्डा को अमान्य करें. (98301c)
onForgotten
कॉलबैक फ़ंक्शन के क्रम में हीonRelease
कॉलबैक फ़ंक्शन को कॉल करें. (2cd790)snapshotFlow
में मौजूद नहीं होने वाले बदले हुए स्टेटस को फ़िल्टर करें. (796b80)
परफ़ॉर्मेंस में सुधार
- जब स्नैपशॉट ऑब्ज़र्वर पहले से ही पारदर्शी हो, तो उसमें बदलाव करें. (f60f30)
SnapshotIdSet.lowest()
को ऑप्टिमाइज़ करें. (7ae149)SnapshotIdSet
में, बिना ऐलोकेशन वालेfold()
का इस्तेमाल करें. (532b7d)- इटरेटर ऐलोकेशन हटाएं (83f96b)
वर्शन 1.7.0-alpha01
24 जनवरी, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha01
रिलीज़ हो गया है. 1.7.0-alpha01 वर्शन में ये बदलाव शामिल हैं.
परफ़ॉर्मेंस ऑप्टिमाइज़ेशन
- चाइल्ड ग्रुप जोड़ने के बाद स्लॉट बनाने की सुविधा जोड़ी गई (b5960c)
- स्नैपशॉट की स्थितियों में रिकॉर्डिंग में किए गए बदलावों को ऑप्टिमाइज़ करना (28c3fe)
- वीडियो को तेज़ी से स्किप करने की सुविधा चालू करना (ed1766)
गड़बड़ियां ठीक की गईं
- इंट्रिन्सिक 'याद रखें' में डिफ़ॉल्ट पैरामीटर मेटा के लिए खाता (096665)
currentCompoundHashKey
को ज़्यादा मामलों में यूनीक बनाएं (d4a872)- इनलाइन फ़ंक्शन कॉल से बाहर निकलते समय ग्रुप को लागू करना (2a90fc)
वर्शन 1.6
वर्शन 1.6.8
12 जून, 2024
androidx.compose.runtime:runtime-*:1.6.8
रिलीज़ हो गया है. वर्शन 1.6.8 में ये बदलाव शामिल हैं.
वर्शन 1.6.7
1 मई, 2024
androidx.compose.runtime:runtime-*:1.6.7
रिलीज़ हो गया है. वर्शन 1.6.7 में ये बदलाव शामिल हैं.
वर्शन 1.6.6
17 अप्रैल, 2024
androidx.compose.runtime:runtime-*:1.6.6
रिलीज़ हो गया है. पिछली रिलीज़ के बाद से कोई बदलाव नहीं हुआ है.
वर्शन 1.6.5
3 अप्रैल, 2024
androidx.compose.runtime:runtime-*:1.6.5
रिलीज़ हो गया है. वर्शन 1.6.5 में ये बदलाव शामिल हैं.
वर्शन 1.6.4
20 मार्च, 2024
androidx.compose.runtime:runtime-*:1.6.4
रिलीज़ हो गया है. वर्शन 1.6.4 में ये बदलाव शामिल हैं.
वर्शन 1.6.3
6 मार्च, 2024
androidx.compose.runtime:runtime-*:1.6.3
रिलीज़ हो गया है. वर्शन 1.6.3 में ये बदलाव शामिल हैं.
वर्शन 1.6.2
21 फ़रवरी, 2024
androidx.compose.runtime:runtime-*:1.6.2
रिलीज़ हो गया है. 1.6.2 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.6.1
7 फ़रवरी, 2024
androidx.compose.runtime:runtime-*:1.6.1
रिलीज़ हो गया है. 1.6.1 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
onForgotten
कॉलबैक फ़ंक्शन के क्रम में हीonRelease
कॉलबैक फ़ंक्शन को कॉल करें. (2cd790)snapshotFlow
में मौजूद नहीं होने वाले बदले हुए स्टेटस को फ़िल्टर करें. (796b80)
वर्शन 1.6.0
24 जनवरी, 2024
androidx.compose.runtime:runtime-*:1.6.0
रिलीज़ हो गया है. 1.6.0 वर्शन में ये बदलाव शामिल हैं.
1.5.0 के बाद किए गए अहम बदलाव
नई सुविधाएं
- रीकंपोज़िशन लूप के दौरान, गड़बड़ियों को फिर से दिखाना (4dff9a)
परफ़ॉर्मेंस ऑप्टिमाइज़ेशन
- स्नैपशॉट की स्थितियों में रिकॉर्डिंग में किए गए बदलावों को ऑप्टिमाइज़ करना (28c3fe)
- Optimize
rememberSaveable
(f01d79) - बदलावों को रिकॉर्ड होने तक, डेरिव्ड स्टेटस को फिर से पढ़ने की प्रोसेस को रोकना (f38099)
- कॉम्पोज़िशन की लोकल वैल्यू देने की सुविधा को बेहतर बनाना (a337ea)
गड़बड़ियां ठीक की गईं
- स्लॉट टेबल की मेमोरी लीक की समस्या को ठीक करना (73fcfe)
- हटाए जाने वाले सब-कंपोज़िशन को फिर से कंपोज करने की प्रोसेस को छोड़ें. (Ieeb99, b/254645321)
RememberObserver
लाइफ़साइकल सिर्फ़ तब ट्रिगर करें, जब उसे याद रखने की सुविधा के हिसाब से सेव किया गया हो. (f6b4dc)$dirty
कैप्चर को इनलाइन लैम्ब्डा तक सीमित करें. (acfca0)- कभी-कभी, मूव किए जा सकने वाले कॉन्टेंट को गलत कॉम्पोज़िशन लोकल मिलने की समस्या को ठीक करना. (035cd6)
वर्शन 1.6.0-rc01
10 जनवरी, 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01
रिलीज़ हो गया है. 1.6.0-rc01 वर्शन में ये कमिट शामिल हैं.
वर्शन 1.6.0-beta03
13 दिसंबर, 2023
androidx.compose.runtime:runtime-*:1.6.0-beta03
रिलीज़ हो गया है. 1.6.0-beta03 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.6.0-beta02
29 नवंबर, 2023
androidx.compose.runtime:runtime-*:1.6.0-beta02
रिलीज़ हो गया है. 1.6.0-beta02 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.6.0-beta01
15 नवंबर, 2023
androidx.compose.runtime:runtime-*:1.6.0-beta01
रिलीज़ हो गया है. 1.6.0-beta01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- एनोटेशन में स्थिरता की कुछ वैल्यू को प्रॉपेगेट करना. (274a4c)
गड़बड़ियां ठीक की गईं
- कॉन्टेक्स्ट में कॉम्पोज़िशन के लोकल स्कोप स्टेटस के लिए, रेफ़रंस नीति का इस्तेमाल करें. (83361c)
- $dirty कैप्चर को इनलाइन लैम्ब्डा तक सीमित करें. (acfca0)
- कभी-कभी, मूव किए जा सकने वाले कॉन्टेंट को गलत कॉम्पोज़िशन लोकल मिलने की समस्या को ठीक करना. (035cd6)
RecomposeScopeImpl
में, तेज़ी से काम करने वाले ऐसे हैशमैप का इस्तेमाल करें जो एलोकेशन नहीं करते. (d79494)DerivedState
मेंObjectIntMap
का इस्तेमाल करें. (21862e)DerivedState
में intSnapshotThreadLocal
के लिए,IntRef
का इस्तेमाल करें. (04eaf4)
वर्शन 1.6.0-alpha08
18 अक्टूबर, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08
रिलीज़ हो गया है. 1.6.0-alpha08 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
RememberObserver
लाइफ़साइकल सिर्फ़ तब ट्रिगर करें, जब उसे याद रखने की सुविधा के हिसाब से सेव किया गया हो. (f6b4dc)- अमान्य आइटम की सूची को क्रम से लगाने में, बेहतर तरीके से आलोकेशन करें. (954d63)
SnapshotStateObserver
में, नए ऐसे मैप का इस्तेमाल करें जिनमें एलोकेशन नहीं किया गया है. (4303ce)- कंपोज़िशन बंद होने पर, अमान्य किए गए आइटम हटाना. (e001be)
वर्शन 1.6.0-alpha07
4 अक्टूबर, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07
रिलीज़ हो गया है. 1.6.0-alpha07 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
SnapshotStateList
को अबRandomAccess
के तौर पर मार्क किया गया है, ताकि सूची में शामिल करने वाले फ़ंक्शन के डायरेक्ट इंडेक्सिंग वर्शन का इस्तेमाल किया जा सके. (I5210c, b/219554654)
वर्शन 1.6.0-alpha06
20 सितंबर, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06
रिलीज़ हो गया है. 1.6.0-alpha06 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.6.0-alpha05
6 सितंबर, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha05
रिलीज़ हो गया है. 1.6.0-alpha05 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.6.0-alpha04
23 अगस्त, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha04
रिलीज़ हो गया है. 1.6.0-alpha04 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- रीकंपोज़िशन लूप के दौरान, गड़बड़ियों को फिर से दिखाना (4dff9a)
एपीआई में हुए बदलाव
ReusableComposition
को बंद करने का एक तरीका जोड़ा गया है. इससे, निगरानी हट जाती है, लेकिन नोड अपने-आप नहीं हटते. बंद किए गए कॉम्पोज़िशन को फिर से चालू करने के लिए,setContent
को कॉल करें. (Ib7f31)- सब-कंपोज़िशन के लाइफ़साइकल को मैनेज करने और उनका फिर से इस्तेमाल करने के लिए,
ReusableComposition
इंटरफ़ेस जोड़ें. (I812d1, b/252846775)
वर्शन 1.6.0-alpha03
9 अगस्त, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03
रिलीज़ हो गया है. 1.6.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
CompositionLocalProvider
के नए ऑप्टिमाइज़ेशन को ठीक करना (3118e88)- इस बात को ठीक करें कि मूव किए जा सकने वाले कॉन्टेंट नोड को कैसे अलग किया जाता है. (5e3d59b)
वर्शन 1.6.0-alpha02
26 जुलाई, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02
रिलीज़ हो गया है. 1.6.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं और परफ़ॉर्मेंस को बेहतर बनाने वाले अपडेट
- Optimize
rememberSaveable
(f01d79) - बदलावों को रिकॉर्ड होने तक, डेरिव्ड स्टेटस को फिर से पढ़ने की प्रोसेस को रोकना (f38099)
- कॉम्पोज़िशन की लोकल वैल्यू देने की सुविधा को बेहतर बनाना (a337ea)
- ग्रुप जनरेट न करने के लिए,
SideEffect
को@ExplicitGroupsComposable
के तौर पर मार्क किया गया है. (I74815) - फिर से इस्तेमाल किए जाने पर, कॉम्पोज़िशन वाले लोकल मैप की तुलना करने से बचें (782071)
एपीआई में हुए बदलाव
CompositionLocalProviders
के लिए, एक खास केस ओवरलोड जोड़ा गया है. इससे, एक से ज़्यादा वैल्यू देने की प्रोसेस को तेज़ करने के लिए इस्तेमाल होने वाले ओवरहेड से बचा जा सकता है. हालांकि, एक वैल्यू देने पर ओवरहेड होता है. (I6d640, b/288169379)
गड़बड़ियां ठीक की गईं
- स्लॉट टेबल की मेमोरी लीक की समस्या को ठीक करना (73fcfe)
stateSaver
के शून्य होने पर,rememberSaveable
को वापस लाने का तरीका ठीक करना (90748c)
वर्शन 1.6.0-alpha01
21 जून, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
रिलीज़ हो गया है. 1.6.0-alpha01 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- हटाए जाने वाले सब-कंपोज़िशन को फिर से कंपोज करने की प्रोसेस को छोड़ें. (Ieeb99, b/254645321)
- स्नैपशॉट लागू करते समय, कम एलोकेशन. (I65c09)
- अगर स्नैपशॉट में बदलाव नहीं किया गया है, तो
DerivedState
मेंreadableHash
का हिसाब लगाने से बचें (68c565)
संस्करण 1.5
वर्शन 1.5.4
18 अक्टूबर, 2023
androidx.compose.runtime:runtime-*:1.5.4
रिलीज़ हो गया है. 1.5.4 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.5.3
4 अक्टूबर, 2023
androidx.compose.runtime:runtime-*:1.5.3
रिलीज़ हो गया है. 1.5.3 वर्शन में ये बदलाव शामिल हैं.
संस्करण 1.5.2
27 सितंबर, 2023
androidx.compose.runtime:runtime-*:1.5.2
रिलीज़ हो गया है. 1.5.2 वर्शन में ये बदलाव शामिल हैं.
संस्करण 1.5.1
6 सितंबर, 2023
androidx.compose.runtime:runtime-*:1.5.1
रिलीज़ हो गया है. 1.5.1 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.5.0
9 अगस्त, 2023
androidx.compose.runtime:runtime-*:1.5.0
रिलीज़ हो गया है. 1.5.0 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- रीकंपोज़िशन, कलर ऐनिमेशन, और
AndroidComposeView
में एलोकेशन हटाए गए. (Ib2bfa) @StateFactoryMarker
एनोटेशन जोड़ा गया है, ताकि उन फ़ंक्शन को मार्क किया जा सके जो स्टेटस बनाते हैं और जिन्हेंremember
कॉल में रैप किया जाना चाहिए. (I64550)- State और
MutableState
(fb3d89) के प्रिमिटिव वर्शन जोड़ें Snapshot.isApplyObserverNotificationPending
(I672a5) जोड़ा गयाState
एपीआई के प्रिमिटिव वर्शन जोड़े गए हैं. इनकी मदद से, ऑटोबॉक्सिंग के लिए जुर्माना दिए बिना,State
ऑब्जेक्ट में Int, Long, Float, और Double वैल्यू को ट्रैक किया जा सकता है. इनका इस्तेमाल करने के लिए, फ़ैक्ट्री के नए तरीकोंmutableIntState(Int)
,mutableFloatStateOf(Float)
वगैरह का इस्तेमाल करें. (I48e43)
गड़बड़ियां ठीक की गईं
- हटाए जाने वाले सब-कंपोज़िशन को फिर से कंपोज करने की प्रोसेस को छोड़ें. (Ieeb99, b/254645321)
ComposerImpl
में स्नैपशॉट का रेफ़रंस न रखें (0206f7)- कंपोज़िशन को दो बार लागू न करें (f5791b)
- यह पक्का करना कि शुरू नहीं की गई, व्युत्पन्न की गई स्टेटस वैल्यू अमान्य हों (aa2a92)
- कंपोज़िशन को हटाने के दौरान
onEndChanges
को कॉल करें. (62cc8c) - कॉन्टेंट को सब-कंपोज़िशन में ले जाने से जुड़ी समस्या ठीक करना (4beb41)
- संभावित डेडलॉक (c1a425 और 8edce0) ठीक करना
- Android विंडो के लिए बनाया गया रीकंपोज़र, अब ON_STOP सूचना मिलने पर सभी कॉम्पोज़िशन के बजाय सिर्फ़
withFrameNanos
को कॉल ब्लॉक करेगा. इसका मतलब है कि बंद की गई गतिविधियों से जुड़ी विंडो, डेटा में हुए बदलावों के लिए फिर से कॉम्पोज़ होती रहेंगी. हालांकि, ऐनिमेशन याwithFrameNanos
को कॉल करने वाला कोई भी दूसरा टूल ब्लॉक हो जाएगा. (Id9e7f, b/240975572) - इफ़ेक्ट 3784073 को हटाने से पहले,
LayoutNode
के लिए बंद करने के कॉलबैक लागू करें - रीस्टार्ट किए गए लैम्ब्डा के लिए बदले गए फ़्लैग ठीक करना ea81df9
- नोड 73fd4d8 के साथ, Composable में लाइव बदलाव करने की सुविधा में हुई गड़बड़ी को ठीक करना
- ON_STOP को कॉम्पोज़िशन ae276f1 के बजाय, फ़्रेम घड़ी के ब्रॉडकास्ट रोकने चाहिए
- बिना बदलाव वाली व्युत्पन्न स्थितियों 84d9b1c के लिए,
SnapshotStateObserver
स्कोप अमान्य करें - कंपोज़िशन 28761fc को हटाते समय, डेड-लॉक की संभावित समस्या को ठीक करना
- कॉन्टेंट को सब-कंपोज़िशन 92d4156 में ले जाने से जुड़ी समस्या ठीक करना
- फिर से शुरू किए गए लैम्ब्डा फ़ंक्शन के लिए, बदले गए फ़्लैग ठीक करें (8a03e9)
- इफ़ेक्ट हटाने से पहले,
LayoutNode
के लिए बंद करने के कॉलबैक को लागू करना (8b0fa4) - नोड ग्रुप खत्म करते समय
endToMarker()
को ठीक करना. (d71d980) - बंद किए जाने की जांच के लिए, मौजूदा
SlotWriter
ग्रुप का इस्तेमाल करें (a0b518b) SlotTable.moveSlotGapTo()
में मौजूदfill
को हटाएं और इसे बंद करें (81f9935)- मूव किए जा सकने वाले कॉन्टेंट को मूव करते समय, अमान्य होने की जानकारी न दिखने की समस्या को ठीक करना (1d7c024)
- किसी दूसरे खाते में ले जाए गए कॉन्टेंट को तुरंत अमान्य होने से रोकने की सुविधा को ठीक करना (8676618)
परफ़ॉर्मेंस में सुधार
- अगर स्नैपशॉट में बदलाव नहीं किया गया है, तो
DerivedState
मेंreadableHash
का हिसाब लगाने से बचें. (307102) - कम किए गए ऐलोकेशन (I65c09, d7ea77, 727974, और 445808 )
CoroutineScopes
(a55362 और bd382f) लिखने की प्रोसेस को तुरंत रद्द करना- स्टेटस ऑब्जेक्ट के रिकॉर्ड को, ऐक्सेस नहीं किए जा सकने वाले स्टेटस रिकॉर्ड से ओवरराइट करना (c986960)
- ग्रुप बनाते समय, सही स्कोप के कंपोजर का इस्तेमाल करना (9a5e5b6)
- स्नैपशॉट को अमान्य करने की जानकारी सेव करने के लिए
IdentityArraySet
का इस्तेमाल करना (7f60cca) - स्नैपशॉट के नतीजों के लिए, ऐलोकेशन कम करना (5bc535f)
वर्शन 1.5.0-rc01
26 जुलाई, 2023
androidx.compose.runtime:runtime-*:1.5.0-rc01
रिलीज़ हो गया है. 1.5.0-rc01 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
बदलावों को रिकॉर्ड होने तक, डेरिव्ड स्टेटस को फिर से पढ़ने की प्रोसेस को रोकना (f38099)
प्राइमिटिव के लिए,
mutableStateOf()
कॉल को उनके खास टाइप पर माइग्रेट करने का सुझाव देने के लिए, एक वैकल्पिक जांच उपलब्ध है. इसका लिंट आईडीAutoboxingStateCreation
है. पहले, यह जांच सभी प्रोजेक्ट के लिए डिफ़ॉल्ट रूप से चालू होती थी. Android Studio के एडिटर और अपने प्रोजेक्ट के लिंट आउटपुट में यह चेतावनी देखने के लिए, इसकी गंभीरता को 'जानकारी' से 'चेतावनी' (या उससे ज़्यादा) में बदलें. इसके लिए, अपने मॉड्यूल के build.gradle या build.gradle.kts कॉन्फ़िगरेशन मेंwarning "AutoboxingStateCreation"
का एलान करें, जैसा कि दिखाया गया है (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
वर्शन 1.5.0-beta03
28 जून, 2023
androidx.compose.runtime:runtime-*:1.5.0-beta03
रिलीज़ हो गया है. 1.5.0-beta03 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- हटाए जाने वाले सब-कंपोज़िशन को फिर से कंपोज करने की प्रोसेस को छोड़ें. (Ieeb99, b/254645321)
वर्शन 1.5.0-beta02
7 जून, 2023
androidx.compose.runtime:runtime-*:1.5.0-beta02
रिलीज़ हो गया है. 1.5.0-beta02 वर्शन में ये बदलाव शामिल हैं.
परफ़ॉर्मेंस में सुधार
- अगर स्नैपशॉट में बदलाव नहीं किया गया है, तो
DerivedState
मेंreadableHash
का हिसाब लगाने से बचें. (307102)
वर्शन 1.5.0-beta01
24 मई, 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01
रिलीज़ हो गया है. 1.5.0-beta01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- रीकंपोज़िशन, कलर ऐनिमेशन, और
AndroidComposeView
(Ib2bfa) में एलोकेशन हटाए गए @StateFactoryMarker
एनोटेशन जोड़ा गया है, ताकि उन फ़ंक्शन को मार्क किया जा सके जो स्टेटस बनाते हैं और जिन्हेंremember
कॉल में रैप किया जाना चाहिए. (I64550)- State और
MutableState
(fb3d89) के प्रिमिटिव वर्शन जोड़ें Snapshot.isApplyObserverNotificationPending
(I672a5) जोड़ा गया
गड़बड़ियां ठीक की गईं
- कम किए गए ऐलोकेशन (I65c09, d7ea77, 727974, और 445808 )
ComposerImpl
में स्नैपशॉट का रेफ़रंस न रखें (0206f7)CoroutineScopes
(a55362 और bd382f) लिखने की प्रोसेस को तुरंत रद्द करना- कंपोज़िशन को दो बार लागू न करें (f5791b)
- यह पक्का करना कि शुरू नहीं की गई, व्युत्पन्न की गई स्टेटस वैल्यू अमान्य हों (aa2a92)
- कंपोज़िशन को हटाने के दौरान
onEndChanges
को कॉल करें. (62cc8c) - कॉन्टेंट को सब-कंपोज़िशन में ले जाने से जुड़ी समस्या ठीक करना (4beb41)
- संभावित डेडलॉक ठीक करना (c1a425
- ON_STOP को कॉम्पोज़िशन (f4a2d1) के बजाय, फ़्रेम क्लॉक ब्रॉडकास्ट को रोकना चाहिए
- फिर से शुरू किए गए लैम्ब्डा फ़ंक्शन के लिए, बदले गए फ़्लैग ठीक करें (8a03e9)
- इफ़ेक्ट हटाने से पहले,
LayoutNode
के लिए बंद करने के कॉलबैक को लागू करना (8b0fa4)
बाहरी योगदान
Snapshot.isApplyObserverNotificationPending
(I672a5) जोड़ा गया
वर्शन 1.5.0-alpha04
10 मई, 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha04
रिलीज़ हो गया है. 1.5.0-alpha04 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
State
एपीआई के प्रिमिटिव वर्शन जोड़े गए हैं. इनकी मदद से, ऑटोबॉक्सिंग के लिए जुर्माना दिए बिना,State
ऑब्जेक्ट में Int, Long, Float, और Double वैल्यू को ट्रैक किया जा सकता है. इनका इस्तेमाल करने के लिए, फ़ैक्ट्री के नए तरीकोंmutableIntState(Int)
,mutableFloatStateOf(Float)
वगैरह का इस्तेमाल करें. (I48e43)
गड़बड़ियां ठीक की गईं
कंपोज़िशन को हटाने के दौरान
onEndChanges
को कॉल करें.Composition.dispose
के दौरान हटाए गए फ़ोकस नोड, फ़ोकस को रीसेट करने के लिएonEndChanges
की सदस्यता ले रहे हैं.(03d4a47)पक्का करें कि शुरू नहीं की गई, व्युत्पन्न स्टेटस वैल्यू अमान्य हों. हर व्युत्पन्न स्थिति,
SnapshotStateObserver
में अपनी डिपेंडेंसी की सूची से जुड़ी होती है. इसका इस्तेमाल, डिपेंडेंसी में बदलाव होने पर, व्युत्पन्न स्थिति से जुड़े स्कोप को अमान्य करने के लिए किया जाता है. डिपेंडेंसी में बदलाव, स्नैपशॉट के आगे की प्रोसेस में रजिस्टर होता है. यह बदलाव,Snapshot.notifyObjectsInitialized()
को कॉल करने की वजह से, डेरिव्ड स्टेटस पढ़ने के बाद हो सकता है.SnapshotStateObserver
में, स्टेट (समय के साथ बदलने वाली वैल्यू) के बारे में जानकारी देने वाला पिछला लॉजिक, पुरानी डिपेंडेंसी को हटा रहा था. इसके बाद, नई वैल्यू पढ़ रहा था. इस वजह से, 'सफ़ाई की गई स्थिति' में अमान्य होने की स्थिति पैदा हुई, जहां डिपेंडेंसी अमान्य होने की स्थिति रजिस्टर नहीं की गई थी.इस बदलाव से, डेरिव्ड स्टेटस रीड और डिपेंडेंसी क्लीनअप का क्रम बदल जाता है. इससे यह पक्का होता है कि अमान्य होने की प्रोसेस हमेशा मान्य स्थिति में होती है. (c472be6)
वर्शन 1.5.0-alpha03
19 अप्रैल, 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha03
रिलीज़ हो गया है. 1.5.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Android विंडो के लिए बनाया गया रीकंपोज़र, अब ON_STOP सूचना मिलने पर सभी कॉम्पोज़िशन के बजाय सिर्फ़
withFrameNanos
को कॉल ब्लॉक करेगा. इसका मतलब है कि बंद की गई गतिविधियों से जुड़ी विंडो, डेटा में हुए बदलावों के लिए फिर से कॉम्पोज़ होती रहेंगी. हालांकि, ऐनिमेशन याwithFrameNanos
को कॉल करने वाला कोई भी दूसरा टूल ब्लॉक हो जाएगा. (Id9e7f, b/240975572)
गड़बड़ियां ठीक की गईं
- स्नैपशॉट की सूची और मैप 5c1a425 में संभावित गतिरोध को ठीक करना
- इफ़ेक्ट 3784073 को हटाने से पहले,
LayoutNode
के लिए बंद करने के कॉलबैक लागू करें - रीस्टार्ट किए गए लैम्ब्डा के लिए बदले गए फ़्लैग ठीक करना ea81df9
- नोड 73fd4d8 के साथ, Composable में लाइव बदलाव करने की सुविधा में हुई गड़बड़ी को ठीक करना
- ON_STOP को कॉम्पोज़िशन ae276f1 के बजाय, फ़्रेम घड़ी के ब्रॉडकास्ट रोकने चाहिए
- बिना बदलाव वाली व्युत्पन्न स्थितियों 84d9b1c के लिए,
SnapshotStateObserver
स्कोप अमान्य करें - कॉम्पोज़िशन 28761fc को हटाते समय, डेड-लॉक की संभावित समस्या को ठीक करना
- कॉन्टेंट को सब-कंपोज़िशन 92d4156 में ले जाने से जुड़ी समस्या ठीक करना
वर्शन 1.5.0-alpha02
5 अप्रैल, 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02
रिलीज़ हो गया है. 1.5.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- Kotlin के
getValue
ऑपरेटर को अब कॉम्पोज़ेबल बनाया जा सकता है (f174f6e)
गड़बड़ियां ठीक की गईं, परफ़ॉर्मेंस में सुधार किए गए
- स्टेटस ऑब्जेक्ट के रिकॉर्ड को, ऐक्सेस नहीं किए जा सकने वाले स्टेटस रिकॉर्ड से ओवरराइट करना (c986960)
- ग्रुप बनाते समय, सही स्कोप के कंपोजर का इस्तेमाल करना (9a5e5b6)
- नोड ग्रुप खत्म करते समय
endToMarker()
को ठीक करना. (d71d980) - बंद करने की जांच के लिए, मौजूदा
SlotWriter
ग्रुप का इस्तेमाल करें (a0b518b) - स्नैपशॉट को अमान्य करने की जानकारी सेव करने के लिए
IdentityArraySet
का इस्तेमाल करना (7f60cca) SlotTable.moveSlotGapTo()
में मौजूदfill
को हटाएं और इसे बंद करें (81f9935)- मूव किए जा सकने वाले कॉन्टेंट को मूव करते समय, अमान्य होने की जानकारी न दिखने की समस्या को ठीक करना (1d7c024)
- किसी दूसरे खाते में ले जाए गए कॉन्टेंट को तुरंत अमान्य होने से रोकने की सुविधा को ठीक करना (8676618)
- स्नैपशॉट के नतीजों के लिए, ऐलोकेशन कम करना (5bc535f)
वर्शन 1.5.0-alpha01
22 मार्च, 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha01
रिलीज़ हो गया है. 1.5.0-alpha01 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
Modifier.Nodes
को कोरूटीन लॉन्च करने की अनुमति देने के लिए,Modifier.Node#coroutineScope
जोड़ा गया (I76ef9)CompositionLocalConsumerModifierNode
इंटरफ़ेस लागू करके,Modifier.Nodes
कोCompositionLocals
पढ़ने की अनुमति दें. (Ib44df)
वर्शन 1.4
वर्शन 1.4.3
3 मई, 2023
androidx.compose.runtime:runtime-*:1.4.3
को बिना किसी बदलाव के रिलीज़ किया जाता है.
वर्शन 1.4.2
19 अप्रैल, 2023
androidx.compose.runtime:runtime-*:1.4.2
रिलीज़ हो गया है. 1.4.2 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
स्नैपशॉट की सूची और मैप 2eb6570 में संभावित डेडलॉक ठीक करना
अगर स्टेटस रिकॉर्ड में सीधे बदलाव करने के साथ-साथ,
SnapshotStateList
याSnapshotStateMap
में कॉन्टेंट जोड़ा जाता है, तो डेडलॉक की समस्या आ सकती है. 93fcae828b में किए गए बदलावों की वजह से, इस समस्या का सामना करने की संभावना ज़्यादा हो गई थी. इन बदलावों में, इस्तेमाल न किए गए रिकॉर्ड को रिलीज़ करने के लिए, डायरेक्ट राइटिंग का इस्तेमाल किया जाता है.लॉक अब इस क्रम में लगाए जाते हैं कि मैप या सूची लॉक होने पर, स्नैपशॉट लॉक कभी भी न लिया जाए.
वर्शन 1.4.1
5 अप्रैल, 2023
androidx.compose.runtime:runtime-*:1.4.1
रिलीज़ हो गया है. 1.4.1 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- नोड ग्रुप खत्म करते समय
endToMarker()
को ठीक करें. d71d980
वर्शन 1.4.0
22 मार्च, 2023
androidx.compose.runtime:runtime-*:1.4.0
रिलीज़ हो गया है. 1.4.0 वर्शन में ये बदलाव शामिल हैं.
1.3.0 के बाद किए गए अहम बदलाव
- पहले कॉम्पोज़िशन 3680e25 के लिए,
LiveData
से शुरू की गई वैल्यू का इस्तेमाल करें - कंपोज नोड के लाइफ़साइकल को देखने के लिए,
ComposeNodeLifecycleCallback
जोड़ें. 8b6a258 ComposableMethod
7b6c7ad मेंparameterTypes
प्रॉपर्टी जोड़ें
गड़बड़ियां ठीक की गईं और परफ़ॉर्मेंस में सुधार किए गए
SnapshotStateObserver
29f4a3e में मौजूद, दोनों स्कोप इंडेक्स मिटाएं- स्किप न किए जा सकने वाले लैम्ब्डा 7d06752 के मुख्य हिस्से में ज़रूरी ग्रुप जोड़ें
- स्नैपशॉट स्टेटस 93fcae8 की मेमोरी रेफ़रंस विशेषताओं को बेहतर बनाना
- कॉम्पोज़िशन लोकल लुकअप 0875717 में बॉक्सिंग हटाएं
- फिर से इस्तेमाल न किए जा सकने वाले नोड ग्रुप के लिए सही कुंजी का इस्तेमाल करें 6388d8d
SnapshotStateObserver
को बार-बार लागू होने और एक साथ लागू होने से बचाना 98cb6baIdentityArraySet
"get" तरीके में, इंडेक्स की सीमाओं की जांच करने की सुविधा जोड़ी गई 35a77d3ViewTreeLifecycleOwner
एक्सटेंशन 21c2122 का इस्तेमाल करने के लिए, लिखें मॉड्यूल को अपडेट करें- रीकंपोज़र के फ़्रेम को पूरा करने के बाद, लागू करने की सूचनाएं भेजें. 98f2641
- Recomposer को रद्द करते समय, इंडेक्स के बाहर की सीमा से जुड़ी क्रैश की समस्या को ठीक करना 8f8656f
- अगर कॉम्पोज़िशन के पैरंट प्रोवाइडर बदल गए हैं, तो हमेशा ज़बरदस्ती फिर से कॉम्पोज़ करें 9526fcc
- रद्द किए गए जॉब a55f7ed के लिए, रीकंपोज़र के लिए तय सीमा
- बड़ी संख्या में कंपोज़र के लिए, अमान्य होने की समस्या को मैनेज करने की सुविधा को बेहतर बनाया गया 9b7ed67
- नॉन-लोकल सामान लौटाने के लिए क्लोज़िंग ग्रुप जनरेट करने से जुड़ी समस्या को ठीक करना b6f590c
वर्शन 1.4.0-rc01
8 मार्च, 2023
androidx.compose.runtime:runtime-*:1.4.0-rc01
रिलीज़ हो गया है. 1.4.0-rc01 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
वर्शन 1.4.0-beta02
22 फ़रवरी, 2023
androidx.compose.runtime:runtime:1.4.0-beta02
और androidx.compose.runtime:runtime-saveable:1.4.0-beta02
रिलीज़ हो गए हैं. 1.4.0-beta02 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.4.0-beta01
8 फ़रवरी, 2023
androidx.compose.runtime:runtime-*:1.4.0-beta01
रिलीज़ हो गया है. 1.4.0-beta01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
ComposeNodeLifecycleCallback
जोड़ा गया, जिससे Compose नोड (I3731b) के लाइफ़साइकल को देखा जा सकता है@TestOnly
कोComposer.disableSourceInformation()
में जोड़ा गया है, क्योंकि इस फ़ंक्शन को सिर्फ़ टेस्ट में कॉल करना सुरक्षित है. (I896c8)
गड़बड़ियां ठीक की गईं
- कॉम्पोज़िशन के लोकल लुकअप में बॉक्सिंग हटाएं (62f66a)
- स्नैपशॉट स्टेटस की मेमोरी रेफ़रंस विशेषताओं को बेहतर बनाना (dfb451)
वर्शन 1.4.0-alpha05
25 जनवरी, 2023
androidx.compose.runtime:runtime:1.4.0-alpha05
और androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
रिलीज़ हो गए हैं. 1.4.0-alpha05 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- इनलाइन/अब काम न करने वाले फ़ंक्शन (I24f91) के टाइप/शून्य होने की संभावना के बारे में ज़्यादा जानकारी
वर्शन 1.4.0-alpha04
11 जनवरी, 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04
रिलीज़ हो गया है. 1.4.0-alpha04 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
TestMonotonicFrameClock
अब एक्सपेरिमेंट के तौर पर उपलब्ध सही एनोटेशन का इस्तेमाल करता है. (I95c9e)
गड़बड़ियां ठीक की गईं
SnapshotStateObserver
को बार-बार लागू होने और एक साथ लागू होने से बचाना (d902fb)
वर्शन 1.4.0-alpha03
7 दिसंबर, 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03
रिलीज़ हो गया है. 1.4.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
java.lang.reflect.Method#getParameterTypes()
(Iab0c3) जैसीComposableMethod
क्लास में नया सार्वजनिक तरीका जोड़ना
गड़बड़ियां ठीक की गईं
- स्नैपशॉट लागू करने की सूचनाएं, अब
Recomposer
के बदलाव लागू करने के बाद भेजी जाती हैं. (Iad6c0, b/222093277)
वर्शन 1.4.0-alpha02
9 नवंबर, 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02
रिलीज़ हो गया है. 1.4.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.4.0-alpha01
24 अक्टूबर, 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha01
रिलीज़ हो गया है. 1.4.0-alpha01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
SnapshotStateList
औरSnapshotStateMap
में अबtoList()
औरtoMap()
को साफ़ तौर पर लागू किया गया है. ये तरीके, कॉपी किए बिना अपना मौजूदा कॉन्टेंट दिखाते हैं. ऐसा इसलिए होता है, क्योंकि ये अपने कॉन्टेंट को सेव करने के लिए इस्तेमाल किए गए, बदले नहीं जा सकने वाले डेटा को दिखाते हैं. उदाहरण के लिए, इस वैल्यू का इस्तेमाल करके,snapshotFlow
का इस्तेमाल करके वैल्यू का फ़्लो बनाया जा सकता है. इसके लिए, डेटा को कॉपी करने की ज़रूरत नहीं होती. (Ica2bd)
वर्शन 1.3
वर्शन 1.3.3
11 जनवरी, 2023
androidx.compose.runtime:runtime-*:1.3.3
रिलीज़ हो गया है. 1.3.3 वर्शन में ये बदलाव शामिल हैं.
- 1.3.2 के बाद से कोई बदलाव नहीं किया गया
वर्शन 1.3.2
7 दिसंबर, 2022
androidx.compose.runtime:runtime-*:1.3.2
रिलीज़ हो गया है. 1.3.2 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- androidx.compose.ui 1.3.2 के साथ काम करने के लिए अपडेट किया गया
वर्शन 1.3.1
9 नवंबर, 2022
androidx.compose.runtime:runtime-*:1.3.1
रिलीज़ हो गया है. 1.3.1 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.3.0
24 अक्टूबर, 2022
androidx.compose.runtime:runtime-*:1.3.0
रिलीज़ हो गया है. 1.3.0 वर्शन में ये बदलाव शामिल हैं.
1.2.0 के बाद किए गए अहम बदलाव
अपवाद को मैनेज करना / लाइव एडिट करने से जुड़ी सहायता
- लाइव एडिट की सुविधा को बेहतर बनाने के लिए, एपीआई जोड़े गए हैं. इनकी मदद से, कॉम्पोज़िशन के दौरान अपवादों को मैनेज किया जा सकता है
- होट रीलोड के लिए कॉम्पोज़िशन की गड़बड़ी को मैनेज करना
- सेव करने/वापस लाने पर, लाइव एडिट करने से जुड़ी गड़बड़ियां ठीक करना
कंपोज़िशन को ट्रैक करना
- कंपोजिशन को ट्रैक करने वाले नए टूल के साथ काम करने के लिए, रनटाइम ट्रैकिंग एपीआई जोड़े गए
- कंपोज़ेबल ट्रैस इवेंट के शुरू/खत्म होने के कॉल जनरेट करना
- ComposerKt.traceEventStart(Int, String) को फिर से जोड़ा गया
Composable Reflection APIs
ComposableMethod
एपीआई का एक नया वर्शन जोड़ा गया है, ताकि कॉम्पोज़ेबल एपीआई को रिफ़्लेक्शन के आधार पर ज़्यादा भरोसेमंद तरीके से कॉल किया जा सके.- invokeComposable को compose runtime पर ले जाना
- composable तरीके को लागू करने के लिए, एपीआई को फिर से तैयार करना
रनटाइम से जुड़ी समस्याएं ठीक करना
- मार्कर की जांच करने वाली स्लॉट टेबल के लिए, रेंज टेस्ट की गड़बड़ी को ठीक करना
- मूव किए जा सकने वाले कॉन्टेंट को SubcomposeLayout में ले जाने और उससे बाहर निकालने की अनुमति देना
- सब-कंपोज़िशन के नए कॉन्टेंट में कॉन्टेंट को ले जाने से जुड़ी समस्या को ठीक करना
स्नैपशॉट सिस्टम
- स्नैपशॉट सिस्टम में, मेमोरी मैनेजमेंट, परफ़ॉर्मेंस, और सटीक जानकारी देने से जुड़े कई सुधार किए गए हैं.
- SnapshotStateObserver में स्कोप हटाने की प्रोसेस को ऑप्टिमाइज़ करना
- ट्रांसफ़र के लिए उपलब्ध कराए गए स्नैपशॉट से बनाए गए नेस्ट किए गए स्नैपशॉट हटाना
- ग्लोबल स्नैपशॉट से स्टेटस पढ़ते समय, 'रेस कंडीशन' की समस्या को ठीक किया गया
- SnapshotStateObserver में DerivedState का इस्तेमाल करना
- अन्य स्कोप में पढ़े जाने पर, कंपज़िशन से व्युत्पन्न स्टेटस को हटाने से रोकना
- DerivedState में HashMap के बजाय IdentityArrayMap का इस्तेमाल करना
- बदली जा सकने वाले वेक्टर का इस्तेमाल करने के लिए, डेरिव्ड स्टेटस ऑब्ज़र्वर अपडेट करना
- SnapshotStateObserver की स्थिति को क्लीनअप करने की सुविधा को अपडेट करना
- SnapshotStateObserver.invalidated को ArraySet से बदलना
- ग्लोबल स्नैपशॉट से स्टेटस पढ़ते समय, 'रेस कंडीशन' की समस्या को ठीक किया गया
- DerivedState हैश कैलकुलेशन में पुराने रिकॉर्ड के इस्तेमाल को ठीक करना
- ग्लोबल स्नैपशॉट को आगे बढ़ाते समय, रेस कंडीशन ठीक करना
- SnapshotStateObserver में, स्कोप के अवलोकन को तेज़ी से हटाना
वर्शन 1.3.0-rc01
5 अक्टूबर, 2022
androidx.compose.runtime:runtime-*:1.3.0-rc01
रिलीज़ हो गया है. 1.3.0-rc01 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- स्लॉट टेबल से आने वाले
ArrayIndexOutOfBoundsException
को ठीक किया गया (b/249076084)
वर्शन 1.3.0-beta03
21 सितंबर, 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03
रिलीज़ हो गया है. 1.3.0-beta03 वर्शन में ये बदलाव शामिल हैं.
ऐसा बदलाव जिससे व्यवहार में बदलाव हो सकता है
remember
औरrememberCoroutineScope
पैरामीटर कोcrossinline
में बदल दिया गया. इससे, आइटम को जल्दी लौटाने की अनुमति देने के बजाय, आइटम को जल्दी लौटाने से जुड़ी गड़बड़ी की रिपोर्ट भेजी जाएगी. इस वजह से, बाद में किसी अंदरूनी गड़बड़ी की रिपोर्ट भेजी जाएगी.- इस बदलाव की वजह से, कंपाइलर की नई गड़बड़ियां रिपोर्ट की जा सकती हैं. इन गड़बड़ियों को ठीक करने के लिए, इन फ़ंक्शन में इस्तेमाल किए गए लैम्ब्डा फ़ंक्शन से नॉन-लोकल रिटर्न हटाने होंगे. (Ibea62)
वर्शन 1.3.0-beta02
7 सितंबर, 2022
androidx.compose.runtime:runtime-*:1.3.0-beta02
रिलीज़ हो गया है. 1.3.0-beta02 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- अपडेट किया गया एपीआई (I64ca0)
वर्शन 1.3.0-beta01
24 अगस्त, 2022
androidx.compose.runtime:runtime-*:1.3.0-beta01
रिलीज़ हो गया है. 1.3.0-beta01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
CompositionData
मेंfind
तरीका जोड़ा गया है, ताकि इस एपीआई का इस्तेमाल करने वाले डेवलपर टूल, कॉम्पोज़िशन की पहचान का इस्तेमाल करके, उसके किसी सब-ग्रुप को तुरंत ढूंढ सकें. (I5794f)
वर्शन 1.3.0-alpha03
10 अगस्त, 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha03
रिलीज़ हो गया है. 1.3.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.3.0-alpha02
27 जुलाई, 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha02
रिलीज़ हो गया है. 1.3.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- पुराने सिस्टम के साथ काम करने की सुविधा के लिए,
ComposerKt.traceEventStart(Int, String)
को फिर से जोड़ा गया (I6e6de)
वर्शन 1.3.0-alpha01
29 जून, 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha01
रिलीज़ हो गया है. 1.3.0-alpha01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- यूटिलिटी फ़ंक्शन को रनटाइम पर ले जाना (I4f729)
वर्शन 1.2
वर्शन 1.2.1
10 अगस्त, 2022
androidx.compose.runtime:runtime-*:1.2.1
रिलीज़ हो गया है. 1.2.1 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- मेमोरी लीक की समस्या को ठीक किया गया: पारदर्शी स्नैपशॉट से बनाए गए नेस्ट किए गए स्नैपशॉट को हटाएं b/239603305
वर्शन 1.2.0
27 जुलाई, 2022
androidx.compose.runtime:runtime-*:1.2.0
रिलीज़ हो गया है. 1.2.0 वर्शन में ये बदलाव शामिल हैं.
1.1.0
के बाद किए गए अहम बदलाव
Compose Runtime के 1.2.0 वर्शन में कुछ सुविधाएं जोड़ी गई थीं. साथ ही, इसमें गड़बड़ियों को ठीक करने के लिए कई बदलाव भी किए गए थे. सबसे अहम नई सुविधा,
movableContentOf
एपीआई की शुरुआत थी. इसका इस्तेमाल, शेयर किए गए एलिमेंट के ट्रांज़िशन जैसे जटिल यूज़र एक्सपीरियंस को चालू करने के लिए किया जा सकता है.movableContentOf
एपीआई, कॉम्पोज़ेबल लैम्ब्डा को ऐसे लैम्ब्डा में बदल देता है जो अपनी स्थिति और उससे जुड़े नोड को किसी भी नई जगह पर ले जाता है. जब पिछला कॉल कॉम्पोज़िशन से बाहर निकलता है, तो स्टेटस कुछ समय के लिए सेव रहता है. अगर कॉम्पोज़िशन में lambda का नया कॉल आता है, तो स्टेटस और उससे जुड़े नोड, नए कॉल की जगह पर ले जाए जाते हैं. अगर कोई नया कॉल नहीं जोड़ा जाता है, तो स्टेटस को हमेशा के लिए हटा दिया जाता है. साथ ही, दर्शकों को इसकी सूचना दी जाती है.अगर किसी एक कॉम्पोज़िशन में
movableContentOf
फ़ंक्शन को कई बार कॉल किया जाता है, तो हर कॉल के लिए नई स्थिति और नोड बनाए जाते हैं. साथ ही, जब कॉल कॉम्पोज़िशन से बाहर निकलते हैं और नए कॉल आते हैं, तो स्थिति को कॉल के कॉल किए जाने के क्रम में, बाहर निकलने वाले कॉल से नए कॉल में ले जाया जाता है. जिन स्टेटस पर नए कॉल का दावा नहीं किया गया है उन्हें हमेशा के लिए हटा दिया जाता है.इस और कुछ अन्य नई सुविधाओं के अलावा, रनटाइम और स्नैपशॉट स्टेटस सिस्टम को स्थिर करने में काफ़ी समय लगा. कई मेमोरी लीक हटा दी गईं और कोड पाथ ऑप्टिमाइज़ कर दिए गए.
बदलावों की खास जानकारी यहां दी गई है:
1.2
में नई सुविधाएं
- एक्सपेरिमेंट के तौर पर उपलब्ध स्नैपशॉट में, असुरक्षित तरीके से साइट पर आने/जाने की जानकारी जोड़ना
- Snapshot.asContextElement एक्सपेरिमेंटल एपीआई जोड़ना
- Snapshot.withoutReadObservation के बारे में जानकारी
- कॉम्पोज़िशन में स्टेटस को एक से दूसरी जगह ले जाने की अनुमति देना
- Compose में रीकंपोज़िशन को ट्रैक करना
1.2
में परफ़ॉर्मेंस
- कॉम्पोज़िशन की लोकल परफ़ॉर्मेंस को बेहतर बनाना
- कॉम्पोज़ करने के लिए बेसलाइन प्रोफ़ाइलें, मानदंडों का इस्तेमाल करके बनाई जानी चाहिए
1.2
में गड़बड़ियां ठीक की गईं
- रिलीज़ को फिर से बनाने के दायरों से ट्रैकिंग की जानकारी हटाना
- अन्य स्कोप में पढ़े जाने पर, कंपज़िशन से व्युत्पन्न स्टेटस को हटाने से रोकना
- SnapshotStateObserver में, ज़्यादा असरदार removeScope() का इस्तेमाल करना
- कंपोज़िशन में, डेरिव्ड स्टेटस की डिपेंडेंसी हटाना
- मूव किए जा सकने वाले कॉन्टेंट में, कॉम्पोनेंट को फिर से व्यवस्थित करने के बाद, currentCompositeKeyHash में होने वाले बदलाव को ठीक करना
- खारिज किए गए कॉम्पोनेंट को हटाने के दौरान, उन्हें मिटाना
- फिर से कॉम्पोज़ करने के दौरान, स्टेटस पढ़ने की समस्या को ठीक करना
- डेरिव्ड स्टेटस ऑब्जेक्ट को ऑब्ज़र्व करते समय, मेमोरी लीक की समस्या ठीक करना
- moveableContent कंपोज़िट हैश कुंजी को एक जैसा रखने के लिए ठीक किया गया
- कॉम्पोज़र के क्रैश होने की समस्या को ठीक करना
- पक्का करना कि किसी ग्रुप को अमान्य करने पर, उसे फिर से कॉम्पोज़ किया जाए
- rememberSaveable फ़ंक्शन के साथ इनपुट को गलत क्रम में वापस लाने पर होने वाली गड़बड़ी को ठीक करना
वर्शन 1.2.0-rc03
29 जून, 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03
रिलीज़ हो गया है. 1.2.0-rc03 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- पहले, डेरिव्ड स्टेटस के अवलोकन को बिना किसी शर्त के, रीकंपोज़ स्कोप और कॉम्पोज़िशन से हटा दिया जाता था. इससे, ऐसे अन्य स्कोप काम नहीं करते थे जो शायद अब भी डेरिव्ड स्टेटस को मॉनिटर कर रहे हों. इस बदलाव से, सिर्फ़ तब स्टेटस के डेरिव्ड इंस्टेंस हटते हैं, जब उन्हें दूसरे स्कोप से नहीं देखा जाता. (b/236618362)
वर्शन 1.2.0-rc02
22 जून, 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02
रिलीज़ हो गया है. 1.2.0-rc02 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.2.0-rc01
15 जून, 2022
androidx.compose.runtime:runtime-*:1.2.0-rc01
रिलीज़ हो गया है. 1.2.0-rc01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Compose लाइब्रेरी में इंटरफ़ेस, अब jdk8 के डिफ़ॉल्ट इंटरफ़ेस के तरीकों (I5bcf1) का इस्तेमाल करके बनाए जाते हैं
वर्शन 1.2.0-beta03
1 जून, 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03
रिलीज़ हो गया है. 1.2.0-beta03 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.2.0-beta02
18 मई, 2022
androidx.compose.runtime:runtime-*:1.2.0-beta02
रिलीज़ हो गया है. 1.2.0-beta02 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.2.0-beta01
11 मई, 2022
androidx.compose.runtime:runtime-*:1.2.0-beta01
रिलीज़ हो गया है. 1.2.0-beta01 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- यह 1.2 का पहला बीटा वर्शन है!
एपीआई में हुए बदलाव
- एक्सपेरिमेंटल
Snapshot.unsafeEnter/unsafeLeave
(I108f3) जोड़ा गया - एक्सपेरिमेंट के तौर पर
Snapshot.asContextElement()
एपीआई (Iff072) जोड़ा गया @ComposableTarget
एनोटेशन और@ComposableTargetMarker
से मार्क किए गए एनोटेशन का इस्तेमाल, अब फ़ाइल के स्कोप में@file
प्रीफ़िक्स का इस्तेमाल करके किया जा सकता है. फ़ाइल के स्कोप में टारगेट एनोटेशन का इस्तेमाल करने पर, कंपाइलर यह मान लेगा कि फ़ाइल में मौजूद सभी कंपोजेबल फ़ंक्शन, उससे जुड़े ऐप्लिकेटर को टारगेट करने के लिए हैं. उदाहरण के लिए,@file:UiComposable
का इस्तेमाल करने से पता चलता है कि सभी@Composable
फ़ंक्शन, Compose यूज़र इंटरफ़ेस (यूआई) लागू करने वाले टूल को टारगेट करते हैं. किसी दूसरे ऐप्लिकेटर को टारगेट करने वाले फ़ंक्शन में, ऐप्लिकेटर के लिए टारगेट मार्कर एनोटेशन को साफ़ तौर पर देना ज़रूरी है. (I40804)
वर्शन 1.2.0-alpha08
20 अप्रैल, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08
रिलीज़ हो गया है. 1.2.0-alpha08 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
CompositionTracer
इंटरफ़ेस मेंTracingInProgress
जोड़ा गया. (Ic6f12)- Composer में
recomposeScopeIdentity
जोड़ना (I0c873) OptIn(InternalComposeTracingApi)
पर, ट्रैकिंग के लिए इस्तेमाल होने वाले प्रतिबंधित एपीआई (Composer.setTracer). (I9187f)ResuableContentHost
जोड़ा गया है. इससे, फिर से इस्तेमाल किए जा सकने वाले कॉन्टेंट के लिए बनाई गई स्थिति के लाइफ़टाइम को बेहतर तरीके से कंट्रोल किया जा सकता है. उदाहरण के लिए, अगर किसी सब-कंपोज़िशन का कुछ समय के लिए इस्तेमाल नहीं किया जा रहा है, तो कॉन्टेंट को बंद किया जा सकता है. इससे, कंपोज़िशन में सेव की गई सभी सेटिंग मिट जाती हैं. जैसे, सभी डिस्पोज़ेबल इफ़ेक्ट. (I2c0f2, b/220322704)
वर्शन 1.2.0-alpha07
6 अप्रैल, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha07
रिलीज़ हो गया है. 1.2.0-alpha07 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- नया फ़ंक्शन
Snapshot.withoutReadObservation { ... }
जोड़ा गया. इससे उपयोगकर्ताओं को, इस ब्लॉक के दौरान पढ़ी गई स्टेट वैल्यू के बदलावों की सदस्यता लिए बिना, पास किए गए लैम्ब्डा को चलाने की अनुमति मिलती है. यह आपके लिए तब काम का हो सकता है, जब आपको स्नैपशॉट पर आधारित थ्रेड सेफ़ रीड/राइट का फ़ायदा लेना हो, लेकिन आपको वैल्यू को बिना री-कंपोज़ किए या फिर से मेज़र किए पढ़ना हो. (I9f365, b/214054486)
वर्शन 1.2.0-alpha06
23 मार्च, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha06
रिलीज़ हो गया है. 1.2.0-alpha06 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.2.0-alpha05
9 मार्च, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha05
रिलीज़ हो गया है. 1.2.0-alpha05 वर्शन में ये बदलाव शामिल हैं.
बाहरी योगदान
- Kotlinx coroutines 1.6.0 का इस्तेमाल करने के लिए अपडेट किया गया (I3366d)
वर्शन 1.2.0-alpha04
23 फ़रवरी, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha04
रिलीज़ हो गया है. 1.2.0-alpha04 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
ComposableTarget
,ComposableTargetMarker
, औरComposableOpenTarget
जोड़े गए हैं. इनकी मदद से, संकलन के समय यह रिपोर्ट किया जा सकता है कि किसी ऐसे ऐप्लिकेटर को टारगेट करने के लिए, कब किसी कंपोजेबल फ़ंक्शन को कॉल किया गया है जिसका इस्तेमाल करने के लिए उसे डिज़ाइन नहीं किया गया था.ज़्यादातर मामलों में, एनोटेशन का अनुमान, Compose के कंपाइलर प्लग इन से लगाया जा सकता है. इसलिए, इन एनोटेशन का सीधे तौर पर इस्तेमाल कम ही किया जाना चाहिए . जिन मामलों में अनुमान नहीं लगाया जा सकता उनमें कस्टम ऐप्लिकेटर बनाना और उसका इस्तेमाल करना, एब्स्ट्रैक्ट कंपोजेबल फ़ंक्शन (जैसे कि इंटरफ़ेस के तरीके), फ़ील्ड या वैश्विक वैरिएबल शामिल हैं. ये वैरिएबल, कंपोजेबल लैम्ब्डा (स्थानीय वैरिएबल और पैरामीटर का अनुमान लगाया जाता है) होते हैं. इसके अलावा,
ComposeNode
या उससे जुड़े कंपोजेबल फ़ंक्शन का इस्तेमाल करने पर भी अनुमान नहीं लगाया जा सकता.कस्टम ऐप्लिकेटर के लिए,
ComposeNode
याReusableComposeNode
को कॉल करने वाले कॉम्पोज़ेबल फ़ंक्शन के लिए, फ़ंक्शन और किसी भी कॉम्पोज़ेबल LAMBDA पैरामीटर टाइप के लिएCompoableTarget
एनोटेशन जोड़ना ज़रूरी है. हालांकि, हमारा सुझाव है कि आप ऐसा एनोटेशन बनाएं जिसेComposableTargetMarker
के साथ एनोटेट किया गया हो. इसके बाद, सीधेComposableTarget
के बजाय, मार्क किए गए एनोटेशन का इस्तेमाल करें.ComposableTargetMarker
के साथ मार्क किया गया कॉम्पोज़ेबल एनोटेशन,ComposbleTarget
के बराबर होता है. इसमें एट्रिब्यूट क्लास का पूरी तरह क्वालिफ़ाइड नाम, लागू करने वाले पैरामीटर के तौर पर होता है.ComposableTargetMarker
का इस्तेमाल करने का उदाहरण देखने के लिए,anroidx.compose.ui.UiComposable
देखें. (I38f11)
वर्शन 1.2.0-alpha03
9 फ़रवरी, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha03
रिलीज़ हो गया है. 1.2.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
movableContentOf
जोड़ा गया, जो किसी कॉम्पोज़ेबल लैम्ब्डा को ऐसे लैम्ब्डा में बदल देता है जो अपनी स्थिति और उससे जुड़े नोड को, किसी भी नई जगह पर ले जाता है. जब पिछला कॉल कॉम्पोज़िशन से बाहर निकलता है, तो स्टेटस कुछ समय के लिए सेव रहता है. अगर कॉम्पोज़िशन में लैम्ब्डा फ़ंक्शन का नया कॉल आता है, तो स्टेटस और उससे जुड़े नोड, नए कॉल की जगह पर ले जाए जाते हैं. अगर कोई नया कॉल नहीं जोड़ा जाता है, तो स्टेटस हमेशा के लिए हटा दिया जाता है. साथ ही, दर्शकों को इसकी सूचना दी जाती है.अगर किसी एक कॉम्पोज़िशन में
movableContentOf
lambda को कई बार कॉल किया जाता है, तो हर कॉल के लिए नई स्थिति और नोड बनाए जाते हैं. साथ ही, जब कॉल कॉम्पोज़िशन से बाहर निकलते हैं और नए कॉल आते हैं, तो स्थिति को कॉल के कॉल किए जाने के क्रम में, बाहर निकलने वाले कॉल से आने वाले कॉल में ले जाया जाता है. जिन स्टेटस पर नए कॉल का दावा नहीं किया गया है उन्हें हमेशा के लिए हटा दिया जाता है. (Ib4850)कंपोज़िशन में ट्रैकिंग एपीआई जोड़ा गया है, ताकि टूल, कंपोजेबल फ़ंक्शन की ज़्यादा जानकारी वाली ट्रैकिंग दे सकें. कंपाइलर अब ट्रैकिंग एपीआई के लिए कॉल जनरेट करता है. इन कॉल में सोर्स की जानकारी शामिल होती है. (Ib0eb5)
रिलीज़ बिल्ड से इन कॉल और उनसे जुड़े सोर्स की जानकारी को हटाने के लिए, Proguard का यह नियम जोड़ें:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
InternalComposeScope
जोड़ें, जिससे टूल को फिर से कॉम्पोज़ करने के दौरान, किसी कॉम्पोज़ेबल की पहचान करने की सुविधा मिलती है. (I07a3f)
वर्शन 1.2.0-alpha02
26 जनवरी, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02
रिलीज़ हो गया है. 1.2.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.2.0-alpha01
12 जनवरी, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha01
रिलीज़ हो गया है. 1.2.0-alpha01 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- लेआउट इंस्पेक्टर में, बदलाव न होने वाले आईडी जनरेट करने के लिए,
CompositionData
मेंidentity
फ़ील्ड जोड़ा गया. (Ic116e)
डिपेंडेंसी से जुड़े अपडेट
- अब यह Kotlin
1.6.10
पर निर्भर करता है.
वर्शन 1.1
वर्शन 1.1.1
23 फ़रवरी, 2022
androidx.compose.runtime:runtime-*:1.1.1
रिलीज़ हो गया है. 1.1.1 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
परNullPointerException
को ठीक करें (aosp/1947059, b/206677462)- Android पर क्लिपबोर्ड से कॉन्टेंट पढ़ते समय, क्लिपबोर्ड के कॉन्टेंट की वजह से क्रैश होने की समस्या को ठीक किया गया. (I06020, b/197769306)
LazyVerticalGrid
(aosp/1931080, b/207510535) में आरटीएल को ठीक किया गया
वर्शन 1.1.0
9 फ़रवरी, 2022
androidx.compose.runtime:runtime-*:1.1.0
रिलीज़ हो गया है. 1.1.0 वर्शन में ये बदलाव शामिल हैं.
1.0.0 के बाद किए गए अहम बदलाव
- Android 12 के ओवरस्क्रोल इफ़ेक्ट के लिए, बेहतर परफ़ॉर्मेंस
- टच टारगेट के साइज़ में सुधार
- ध्यान दें कि Compose 1.0 के साथ, Material कॉम्पोनेंट अपने लेआउट स्पेस को बड़ा कर देंगे, ताकि टच टारगेट साइज़ के लिए Material के सुलभता दिशा-निर्देशों को पूरा किया जा सके. उदाहरण के लिए, बटन के टच टारगेट का साइज़,
48x48dp
तक बढ़ जाएगा. भले ही, आपने बटन का साइज़ छोटा सेट किया हो. इससे, Compose Material को Material Design कॉम्पोनेंट के काम करने के तरीके के हिसाब से अलाइन किया जाता है. इससे, व्यू और Compose को एक साथ इस्तेमाल करने पर, दोनों का काम करने का तरीका एक जैसा रहता है. इस बदलाव से यह भी पक्का होता है कि Compose के Material कॉम्पोनेंट का इस्तेमाल करके यूज़र इंटरफ़ेस (यूआई) बनाते समय, टच टारगेट की सुलभता से जुड़ी ज़रूरी शर्तें पूरी होंगी. - नेविगेशन रेल के लिए बेहतर सहायता
- पहले एक्सपेरिमेंट के तौर पर उपलब्ध कई एपीआई को स्टेबल एपीआई के तौर पर उपलब्ध कराया गया
- Kotlin के नए वर्शन के लिए सहायता
वर्शन 1.1.0-rc03
26 जनवरी, 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
रिलीज़ हो गया है. 1.1.0-rc03 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Compose Material
1.1.0-rc03
के साथ काम करने के लिए अपडेट किया गया
वर्शन 1.1.0-rc01
15 दिसंबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01
रिलीज़ हो गया है. 1.1.0-rc01 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.1.0-beta04
1 दिसंबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-beta04
रिलीज़ हो गया है. 1.1.0-beta04 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- Kotlin
1.6.0
के साथ काम करने के लिए अपडेट किया गया
वर्शन 1.1.0-beta03
17 नवंबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03
रिलीज़ हो गया है. 1.1.0-beta03 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.1.0-beta02
3 नवंबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-beta02
रिलीज़ हो गया है. 1.1.0-beta02 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- स्नैपशॉट कोड को कई फ़ाइलों में बांटा गया था, लेकिन अब भी सभी एक ही JVM क्लास में मौजूद हैं. (Ic6c98)
वर्शन 1.1.0-beta01
27 अक्टूबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01
रिलीज़ हो गया है. 1.1.0-beta01 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.1.0-alpha06
13 अक्टूबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha06
रिलीज़ हो गया है. 1.1.0-alpha06 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Composer के उन तरीकों से
InternalCompilerApi
हटा दिया गया जिन्हें क्रॉस-मॉड्यूल (I1aa0b) के तौर पर कॉल करना ज़रूरी है Recomposer.state
को बंद कर दिया गया है और इसेRecomposer.currentState
से बदल दिया गया है, ताकि इसका टाइप StateFlow में बदला जा सके (Ic2ab3, b/197773820)
वर्शन 1.1.0-alpha05
29 सितंबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha05
रिलीज़ हो गया है. 1.1.0-alpha05 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.1.0-alpha04
15 सितंबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha04
रिलीज़ हो गया है. 1.1.0-alpha04 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.1.0-alpha03
1 सितंबर, 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha03
रिलीज़ हो गया है. 1.1.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- Compose कंपाइलर अब Compose Runtime (1.0) के पुराने वर्शन के साथ काम करता है. इस बदलाव से पहले, Compose कंपाइलर सिर्फ़ उसी वर्शन या उसके बाद के वर्शन के Compose रनटाइम के साथ काम करता था. इस बदलाव के बाद, Compose कंपाइलर, Compose Runtime (1.0) के पुराने वर्शन के साथ काम करता है. (aosp/1796968)
- Compose
1.1.0-alpha03
को Kotlin1.5.30
पर निर्भर करने के लिए अपडेट किया गया. (I74545)
वर्शन 1.1.0-alpha02
18 अगस्त, 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
रिलीज़ हो गया है. 1.1.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
वर्शन 1.1.0-alpha01
4 अगस्त, 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha01
रिलीज़ हो गया है. 1.1.0-alpha01 वर्शन में ये कमिट शामिल हैं.
संस्करण 1.0
वर्शन 1.0.5
3 नवंबर, 2021
androidx.compose.runtime:runtime-*:1.0.5
रिलीज़ हो गया है. 1.0.5 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- derivedStateOf इंस्टेंस को क्रैश ट्रैकिंग से जुड़ी समस्या ठीक की गई. (aosp/1792247)
वर्शन 1.0.4
13 अक्टूबर, 2021
androidx.compose.runtime:runtime-*:1.0.4
रिलीज़ हो गया है. 1.0.4 वर्शन में ये बदलाव शामिल हैं.
डिपेंडेंसी से जुड़े अपडेट
- Kotlin
1.5.31
पर निर्भर करने के लिए अपडेट किया गया
वर्शन 1.0.3
29 सितंबर, 2021
androidx.compose.runtime:runtime-*:1.0.3
रिलीज़ हो गया है. 1.0.3 वर्शन में ये बदलाव शामिल हैं.
डिपेंडेंसी से जुड़े अपडेट
- Kotlin
1.5.30
पर निर्भर करने के लिए अपडेट किया गया
वर्शन 1.0.2
1 सितंबर, 2021
androidx.compose.runtime:runtime-*:1.0.2
रिलीज़ हो गया है. 1.0.2 वर्शन में ये बदलाव शामिल हैं.
Compose 1.0.2
रिलीज़ के साथ काम करने के लिए अपडेट किया गया. Compose 1.0.2
, अब भी Kotlin 1.5.21
के साथ काम करता है.
वर्शन 1.0.1
4 अगस्त, 2021
androidx.compose.runtime:runtime-*:1.0.1
रिलीज़ हो गया है. 1.0.1 वर्शन में ये बदलाव शामिल हैं.
डिपेंडेंसी से जुड़े अपडेट
- Kotlin
1.5.21
पर निर्भर करने के लिए अपडेट किया गया.
वर्शन 1.0.0
28 जुलाई, 2021
androidx.compose.runtime:runtime-*:1.0.0
रिलीज़ हो गया है. 1.0.0 वर्शन में ये बदलाव शामिल हैं.
1.0.0 के वर्शन की मुख्य सुविधाएं
यह Compose का पहला स्टेबल वर्शन है. ज़्यादा जानकारी के लिए, कृपया Compose रिलीज़ का आधिकारिक ब्लॉग देखें!
ऐसी समस्याएं जिनकी जानकारी पहले से है
अगर Android Studio Bumblebee Canary 4 या AGP
7.1.0-alpha04
/7.1.0-alpha05
का इस्तेमाल किया जा रहा है, तो आपको क्रैश होने की यह समस्या आ सकती है:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
इसे ठीक करने के लिए, अपनी
build.gradle
फ़ाइल में minSdkVersion को कुछ समय के लिए 24 या उसके बाद के वर्शन पर सेट करें. यह समस्या, Android Studio Bumblebee और AGP7.1
के अगले वर्शन में ठीक कर दी जाएगी. (b/194289155)
वर्शन 1.0.0-rc02
14 जुलाई, 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
रिलीज़ हो गया है. 1.0.0-rc02 वर्शन में ये कमिट शामिल हैं.
- SnapshotStateObserver में रेस कंडीशन ठीक की गईं, जिनकी वजह से अचानक से NullPointerExceptions दिखते थे. (aosp/1763445, aosp/1758105, b/192677711)
- रनटाइम स्नैपशॉट से जुड़ी समस्याएं ठीक की गईं, जिनकी वजह से
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
क्रैश हो रहा था. (b/193006595, b/192570897)
वर्शन 1.0.0-rc01
1 जुलाई, 2021
androidx.compose.runtime:runtime-*:1.0.0-rc01
रिलीज़ हो गया है. 1.0.0-rc01 वर्शन में ये कमिट शामिल हैं.
वर्शन 1.0.0-beta09
16 जून, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta09
रिलीज़ हो गया है. 1.0.0-beta09 वर्शन में ये बदलाव शामिल हैं.
प्रोफ़ाइल के लिए नियम जोड़े गए
इस रिलीज़ में, इन कॉम्पोज़ मॉड्यूल (I14ed6) में प्रोफ़ाइल नियम जोड़े गए हैं:
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
प्रोफ़ाइल के नियम क्या होते हैं?
किसी लाइब्रेरी के लिए प्रोफ़ाइल के नियम,
src/main
या मिलती-जुलती डायरेक्ट्री में मौजूद टेक्स्ट फ़ाइलbaseline-prof.txt
में बताए जाते हैं. फ़ाइल में हर लाइन के लिए एक नियम तय किया जाता है. इस मामले में, नियम लाइब्रेरी में मौजूद तरीकों या क्लास से मैच करने के लिए एक पैटर्न होता है. इन नियमों का सिंटैक्स, ART प्रोफ़ाइल के ऐसे फ़ॉर्मैट का सुपरसेट है जिसे कोई भी व्यक्ति पढ़ सकता है. इसका इस्तेमालadb shell profman --dump-classes-and-methods ...
का इस्तेमाल करते समय किया जाता है. ये नियम, किसी भी तरीके या क्लास को टारगेट करने के लिए, इनमें से किसी एक फ़ॉर्म में होते हैं.किसी तरीके के नियम का पैटर्न इस तरह का होगा:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
क्लास के लिए बने नियम का पैटर्न इस तरह का होगा:
<CLASS_DESCRIPTOR>
यहां
<FLAGS>
,H
,S
, औरP
में से एक या उससे ज़्यादा वर्ण हैं. इनसे यह पता चलता है कि इस तरीके को "हॉट", "स्टार्टअप" या "स्टार्टअप के बाद" के तौर पर फ़्लैग किया जाना चाहिए या नहीं.<CLASS_DESCRIPTOR>
, उस क्लास का डिस्क्रिप्टर है जिससे टारगेट किया गया तरीका जुड़ा है. उदाहरण के लिए, क्लासandroidx.compose.runtime.SlotTable
का डिस्क्रिप्टरLandroidx/compose/runtime/SlotTable;
होगा.<METHOD_SIGNATURE>
, मेथड का सिग्नेचर होता है. इसमें मेथड का नाम, पैरामीटर टाइप, और रिटर्न टाइप शामिल होते हैं. उदाहरण के लिए,LayoutNode
पर मौजूदfun isPlaced(): Boolean
तरीके का हस्ताक्षरisPlaced()Z
है.इन पैटर्न में वाइल्डकार्ड (
**
,*
, और?
) हो सकते हैं, ताकि एक नियम में कई तरीके या क्लास शामिल हो सकें.
ये नियम क्या करते हैं?
जिस तरीके पर
H
फ़्लैग लगा होता है वह "हॉट" तरीका होता है. इसे समय से पहले कंपाइल किया जाना चाहिए.जिस तरीके पर
S
फ़्लैग लगा होता है उससे पता चलता है कि उसे स्टार्टअप के समय कॉल किया जाता है. साथ ही, स्टार्टअप के समय उसे कंपाइल करने और उसके बारे में जानकारी देने में लगने वाले समय को बचाने के लिए, उसे पहले से कंपाइल किया जाना चाहिए.जिस तरीके के साथ
P
फ़्लैग होता है उससे पता चलता है कि यह स्टार्टअप के बाद कॉल किया जाने वाला तरीका है.इस फ़ाइल में मौजूद किसी क्लास का मतलब है कि उसका इस्तेमाल स्टार्टअप के दौरान किया जाता है. साथ ही, क्लास लोड होने में लगने वाले समय को बचाने के लिए, उसे पहले से ही हेप में असाइन किया जाना चाहिए.
यह कैसे काम करता है?
- लाइब्रेरी ये नियम तय कर सकती हैं, जिन्हें AAR आर्टफ़ैक्ट में पैकेज किया जाएगा. जब इन आर्टफ़ैक्ट वाले ऐप्लिकेशन को बनाया जाता है, तो इन नियमों को आपस में मर्ज कर दिया जाता है. इसके बाद, मर्ज किए गए नियमों का इस्तेमाल, ऐप्लिकेशन के हिसाब से एक छोटी बाइनरी ART प्रोफ़ाइल बनाने के लिए किया जाता है. इसके बाद, जब ऐप्लिकेशन को डिवाइसों पर इंस्टॉल किया जाता है, तो ART इस प्रोफ़ाइल का फ़ायदा ले सकता है. इससे, ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, ऐप्लिकेशन के किसी खास सबसेट को पहले से कंपाइल किया जा सकता है. खास तौर पर, ऐप्लिकेशन को पहली बार चलाने पर. ध्यान दें कि इससे, डीबग किए जा सकने वाले ऐप्लिकेशन पर कोई असर नहीं पड़ेगा.
वर्शन 1.0.0-beta08
2 जून, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
रिलीज़ हो गया है. 1.0.0-beta08 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
State<T>
अबState<out T>
(I69049) हो गया हैControlledComposition
एपीआई में बदलाव, ताकि फिर से कॉम्पोज़ करने की सुविधा चालू की जा सके. इससे, फिर से कॉम्पोज़ करने के एक पास में बदलाव किए जा सकते हैं. (Iaafd1, b/184173932)
वर्शन 1.0.0-beta07
18 मई, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07
रिलीज़ हो गया है. 1.0.0-beta07 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- नए कंपाइलर एपीआई जोड़े गए हैं. इनकी मदद से, सोर्स को छोटा करते समय, कंपाइलर से जनरेट की गई सोर्स जानकारी को हटाया जा सकता है. (Ia34e6)
ReusableContent
को पेश किया गया है. यह कुंजी बदलने पर, अपने कॉन्टेंट में मौजूद नोड को बदलने के बजाय, उनका फिर से इस्तेमाल करने की कोशिश करेगा. कुंजी बदलने पर, कॉन्टेंट के लिए स्लॉट टेबल में मौजूद पिछली वैल्यू को अनदेखा कर दिया जाता है. हालांकि, जनरेट किए गए नोड और नोड को अपडेट करने के लिए इस्तेमाल की गई वैल्यू को अनदेखा नहीं किया जाता.ReusableComposeNode
को पेश किया गया है, जोComposeNode
के लिए किए गए बदलाव के बजाय, उत्सर्जित किए गए नोड का फिर से इस्तेमाल करेगा. (I1dd86)@ComposeCompilerApi
अब@RequiresOptIn
नहीं है (Iab690)
गड़बड़ियां ठीक की गईं
- LazyColumn/Row अब पहले दिखने वाले दो आइटम को चालू रखेगा (डिस्पोज नहीं किया जाएगा), भले ही वे पहले से स्क्रोल आउट हों. इससे, कॉम्पोनेंट को स्क्रोल की परफ़ॉर्मेंस को बेहतर बनाने वाला नया आइटम कंपोज करने के लिए, चालू सब-कंपोज़िशन का फिर से इस्तेमाल करने में मदद मिलती है. (Ie5555)
वर्शन 1.0.0-beta06
5 मई, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta06
रिलीज़ हो गया है. 1.0.0-beta06 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
@ComposeCompilerApi
अब@RequiresOptIn
नहीं है (Iab690)
वर्शन 1.0.0-beta05
21 अप्रैल, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05
रिलीज़ हो गया है. 1.0.0-beta05 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- स्नैपशॉट को पढ़ने और उसमें बदलाव करने की जानकारी रिकॉर्ड करने के लिए,
@InternalComposeApi
को हटाया गया (Id134d)
गड़बड़ियां ठीक की गईं
- ui-test-manifest और ui-tooling-data की AndroidManifest फ़ाइलें अब Android 12 (I6f9de, b/184718994) के साथ काम करती हैं
वर्शन 1.0.0-beta04
7 अप्रैल, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta04
रिलीज़ हो गया है. 1.0.0-beta04 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
इस बदलाव से पहले, लोकल कॉम्पोज़ेबल फ़ंक्शन को उनके पैरामीटर के आधार पर स्किप किया जा सकता था. इस बदलाव के बाद, कोई भी लोकल कंपोजेबल फ़ंक्शन स्किप नहीं होगा. यह बदलाव इसलिए किया गया है, क्योंकि पैरंट से पैरामीटर कैप्चर करना, लोकल फ़ंक्शन के लिए आम और ज़रूरी है. पैरामीटर को स्किप करने से गड़बड़ियां होती हैं.
खास जानकारी के लिए, यह उदाहरण देखें:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
इस बदलाव से पहले,
count
पैरामीटर अपडेट होने के बाद भी,ShowCount
कॉम्पोज़ेबल फ़ंक्शन हमेशा स्किप हो जाता था. अब ऐसा नहीं है. (I5648a)इनपुट पैरामीटर (I1b110, b/182403380) के साथ इस्तेमाल करने पर,
rememberSaveable()
पुरानी वैल्यू को वापस ला रहा था. इस समस्या को ठीक कर दिया गया है
वर्शन 1.0.0-beta03
24 मार्च, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03
रिलीज़ हो गया है. 1.0.0-beta03 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
DefaultMonotonicFrameClock
का अब इस्तेमाल नहीं किया जा सकता.MonotonicFrameClock
के बिनाwithFrameNanos
याRecomposer.runRecomposeAndApplyChanges
को कॉल करने पर, अबIllegalStateException
दिखेगा. (I4eb0d)
वर्शन 1.0.0-beta02
10 मार्च, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02
रिलीज़ हो गया है. 1.0.0-beta02 वर्शन में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- एक्सपेरिमेंट के तौर पर उपलब्ध एपीआई के सार्वजनिक इस्तेमाल पर पाबंदियां लगाना (I6aa29, b/174531520)
- नेविगेशन-कॉम्पोज़ के डेस्टिनेशन में इस्तेमाल किए जाने पर,
rememberSaveable { mutableStateOf(0) }
के काम न करने की समस्या को ठीक किया गया. (I1312b, b/180042685, b/180701630)
वर्शन 1.0.0-beta01
24 फ़रवरी, 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
रिलीज़ हो गया है. 1.0.0-beta01 वर्शन में ये बदलाव शामिल हैं.
यह Compose 1.0.0 बीटा वर्शन की पहली रिलीज़ है.
एपीआई में हुए बदलाव
- मुख्य फ़्रेम लूप से अमान्य कॉम्पोज़िशन को फिर से कॉम्पोज़ करने के लिए,
Recomposer.runRecomposeConcurrentlyAndApplyChanges
एक्सपेरिमेंटल एपीआई जोड़ें. (I342d0) - @ReadOnlyComposable के साथ मार्क किए गए सभी कॉम्पोज़ेबल की पुष्टि, अब कंपाइल के समय की जाती है. इससे यह पक्का किया जा सकता है कि वे सिर्फ़ अन्य @ReadOnlyComposables को कॉल करते हैं (I58961)
compositionLocalOf
औरstaticCompositionLocalOf
के लिएdefaultFactory
अब ज़रूरी है, न कि वैकल्पिक.इस बदलाव से, ऐसे टाइप के लिए संभावित टाइप गड़बड़ी हट जाती है जिनमें वैल्यू न होने पर भी गड़बड़ी नहीं होती और जिनके लिए कोई डिफ़ॉल्ट फ़ैक्ट्री नहीं दी गई है. पहले, यह वैल्यू न होने पर भी वैल्यू का रेफ़रंस दिखाती थी.
शून्य वैल्यू वाले टाइप के लिए, डिफ़ॉल्ट फ़ैक्ट्री के तौर पर
{ null }
दें.हमारा सुझाव है कि जब तक कोई सही डिफ़ॉल्ट वैल्यू उपलब्ध न कराई जा सके, तब तक नॉन-शून्य वैल्यू वाले टाइप के साथ लोकल का इस्तेमाल न करें. अगर कोई सही डिफ़ॉल्ट वैल्यू मौजूद नहीं है, तो
defaultFactory
lambda फ़ंक्शन को एक अपवाद फेंकना चाहिए. हालांकि, अपवाद मिलने का मतलब है कि लोकल के उपभोक्ताओं को, इसके उपलब्ध होने पर निर्भर रहना होगा. हालांकि, टाइप सिस्टम इस पर लागू नहीं होता. (Ifbd2a)Compose के रनटाइम से, इस्तेमाल नहीं किए जा सकने वाले सिंबल हटा दिए गए हैं (I3252c)
इस्तेमाल पर रोक लगाए गए
emptyContent()
को हटा दिया गया है. इसके बजाय,{}
का इस्तेमाल करें. (Idb33f, b/179432510)Providers का नाम बदलकर CompositionLocalProvider कर दिया गया है
- कॉम्पोज़िशन कंस्ट्रक्टर अब कोई कुंजी पैरामीटर स्वीकार नहीं करता और इसे बंद कर दिया गया है.
- currentCompositeKeyHash को, टॉप लेवल फ़ंक्शन के बजाय, टॉप लेवल की कंपोज की जा सकने वाली प्रॉपर्टी में बदल दिया गया है.
- CompositionData और CompositionGroup को androidx.compose.runtime.tooling नेमस्पेस में ले जाया गया है
- ComposableLambda को किसी खास क्लास के बजाय इंटरफ़ेस बनाया गया है. साथ ही, इसमें अब टाइप पैरामीटर नहीं हैं.
- ComposableLambdaN को कंक्रीट क्लास के बजाय इंटरफ़ेस बनाया गया है. साथ ही, अब इसमें टाइप पैरामीटर नहीं हैं.
- snapshotFlow फ़ंक्शन को androidx.compose.runtime नेमस्पेस में ले जाया गया है
- SnapshotMutationPolicy का मर्ज करने का तरीका अब एक्सपेरिमेंटल नहीं है
- @TestOnly टॉप लेवल clearRoots फ़ंक्शन हटा दिया गया है. अब इसकी ज़रूरत नहीं है.
- keySourceInfoOf और resetSourceInfo फ़ंक्शन हटा दिए गए हैं. अब इनकी ज़रूरत नहीं है.
- Composer.collectKeySourceInformation को हटा दिया गया है. अब इसकी ज़रूरत नहीं है.
- isJoinedKey, joinedKeyLeft, और joinedKeyRight तरीके हटा दिए गए हैं. अब इनकी ज़रूरत नहीं है.
- कई टॉप लेवल एपीआई को अलग-अलग फ़ाइलों में ले जाया गया है और उन्हें फिर से व्यवस्थित किया गया है. Kotlin की फ़ाइल क्लास के सेमेंटेक्स की वजह से, इससे बाइनरी के साथ काम करने की सुविधा बंद हो जाएगी, लेकिन सोर्स के साथ काम करने की सुविधा नहीं. इसलिए, ज़्यादातर उपयोगकर्ताओं को कोई समस्या नहीं होगी.
- (I99b7d, b/177245490)
SnapshotStateObserver अब एक्सपेरिमेंटल नहीं है (Id2e6a)
पहले से बंद किए गए कुछ एपीआई मिटाए गए (Ice5da, b/178633932)
Material API में ये बदलाव किए गए हैं:
- डिफ़ॉल्ट पैडिंग को पसंद के मुताबिक बनाने के लिए, Top/BottomAppBar में contentPadding पैरामीटर जोड़ा गया है.
- BackdropScaffold में पैरामीटर का क्रम बदला गया है, ताकि ज़रूरी पैरामीटर, वैकल्पिक पैरामीटर से पहले दिखें. ऐसा, एपीआई के दिशा-निर्देशों का पालन करने के लिए किया गया है.
- BottomNavigationItem में
icon
पैरामीटर कोselected
औरonClick
के बाद ले जाया गया. - BottomNavigationItem में
alwaysShowLabels
पैरामीटर का नाम बदलकरalwaysShowLabel
किया गया. - कुछ कॉम्पोनेंट में
bodyContent
पैरामीटर का नाम बदलकर सिर्फ़content
कर दिया गया. ButtonDefaults.buttonColors()
में पैरामीटर का क्रम बदला गया. कृपया ध्यान दें कि पैरामीटर का टाइप नहीं बदला है. इसलिए, इससे आपके कोड में कोई गड़बड़ी नहीं होगी. कृपया पक्का करें कि आपने नाम वाले पैरामीटर का इस्तेमाल किया हो या क्रम को मैन्युअल तरीके से अपडेट किया हो. ऐसा न करने पर, आपका कोड पहले की तरह काम नहीं करेगा.darkColors()
मेंsecondaryVariant
पैरामीटर जोड़ा गया. आम तौर पर, यह रंग गहरे रंग वाली थीम मेंsecondary
जैसा ही होता है. हालांकि, इसे एक जैसा रखने और पसंद के मुताबिक बनाने के लिए जोड़ा गया है.- सार्वजनिक एपीआई प्लैटफ़ॉर्म से ElevationDefaults और animateElevation() को हटा दिया गया है, क्योंकि इनका आम तौर पर इस्तेमाल नहीं किया जाता था या ये काम के नहीं थे.
Slider
में मौजूदonValueChangeEnd
का नाम बदलकरonValueChangeFinished
किया गया और इसे वैल्यू के बिना छोड़ने की अनुमति दी गई.- एक जैसा नाम रखने के लिए,
Snackbar
में मौजूदtext
पैरामीटर का नाम बदलकरcontent
किया गया. - डिफ़ॉल्ट पैडिंग को पसंद के मुताबिक बनाने के लिए,
DropdownMenuItem
मेंcontentPadding
पैरामीटर जोड़ा गया. साथ ही,content
कोRowScope
का एक्सटेंशन बनाया गया. ModalDrawerLayout
का नाम बदलकरModalDrawer
किया गया.BottomDrawerLayout
का नाम बदलकरBottomDrawer
किया गया.- (I1cc66)
वर्शन 1.0.0-alpha12
10 फ़रवरी, 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12
रिलीज़ हो गया है. 1.0.0-alpha12 वर्शन में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- UiApplier से, ViewGroups के लिए सहायता हटा दी गई है. इस्तेमाल नहीं किए जा सकने वाले emitView कॉम्पोज़ेबल हटा दिए गए हैं. (Ifb214)
- CompositionReference का नाम बदलकर CompositionContext (I53fcb) कर दिया गया
- ComponentActivity.setContent को androidx.activity:activity-compose मॉड्यूल में, androidx.activity.compose.setContent में ले जाया गया है. (Icf416)
- Snapshot API को अपडेट किया गया है, ताकि वह एपीआई के दिशा-निर्देश के मुताबिक हो. साथ ही, सार्वजनिक एपीआई से लागू करने की इंटरनल क्लास को छिपाया जा सके. (Id9e32)
- ऐंबियंट -> कॉम्पोज़िशनलोकल के नाम से मेल खाने के लिए, ऐंबियंट का नाम बदला गया. ऐंबियंट को पहले AmbientFoo कहा जाता था. अब CompositionLocals को LocalFoo कहा जाता है. (I2d55d)
- Ambient का नाम बदलकर CompositionLocal और ambientOf / staticAmbientOf का नाम बदलकर compositionLocalOf / staticCompositionLocalOf कर दिया गया है. इस बदलाव से, CompositionLocal के मकसद को ज़्यादा साफ़ तौर पर समझने में मदद मिलती है: यह किसी कंपज़िशन के लिए स्थानीय वैल्यू देने / वापस पाने का तरीका है. CompositionLocal इंस्टेंस के नाम के आगे
Local
होना चाहिए. जैसे, val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - takeMutableSnapshot और takeSnapshot को, स्नैपशॉट के साथ काम करने वाले तरीकों के तौर पर शामिल किया गया है. (I91f19)
@ComposableContract
की जगह, अब तीन और खास एनोटेशन का इस्तेमाल किया जाता है.@ComposableContract(restartable = false)
को@NonRestartableComposable
पर सेट कर दिया गया है@ComposableContract(readonly = true)
को@ReadOnlyComposable
पर सेट कर दिया गया है@ComposableContract(preventCapture = true)
को@DisallowComposableCalls
पर सेट कर दिया गया है@ComposableContract(tracked = true)
को हटा दिया गया है. (I60a9d)emptyContent() और (@Composable () -> Unit).orEmpty() सुविधाओं को बंद कर दिया गया है, क्योंकि अब इनका परफ़ॉर्मेंस पर कोई अच्छा असर नहीं पड़ता या इनसे कोई फ़ायदा नहीं मिलता (I0484d)
snapshotFlow
औरwithMutableSnapshot
अब एक्सपेरिमेंट के तौर पर उपलब्ध नहीं हैं (I6a45f)रीकंपोज़र को अब बंद किया जा सकता है. बंद किए गए रीकंपोज़र, कॉम्पोज़िशन के चाइल्ड कोरुटाइन के पूरा होने तक रीकंपोज़िशन जारी रखेंगे. Recomposer.shutDown को 'रद्द करें' के तौर पर बदला गया, ताकि इसे 'बंद करें' से अलग किया जा सके. (Ib6d76)
compose:runtime-dispatch
आर्टफ़ैक्ट अब काम नहीं करता. MonotonicFrameClock को अब compose:runtime में और AndroidUiDispatcher को compose:ui में देखा जा सकता है. (Ib5c36)Compose कंपाइलर प्लग इन जिस एपीआई को टारगेट करता है उसे फिर से तैयार किया गया है, ताकि किसी खास क्लास के बजाय इंटरफ़ेस का इस्तेमाल किया जा सके. इंटरफ़ेस अब टाइप पैरामीटर का भी इस्तेमाल नहीं करता.
यह एक इंटरनल बदलाव है. इससे सोर्स कोड के साथ काम करने की सुविधा पर असर नहीं पड़ना चाहिए. हालांकि, यह बदलाव बाइनरी के साथ काम करने की सुविधा को बंद कर देता है. (I3b922, b/169406779)
SnapshotMutableState को पेश किया गया (Icfd03)
DisposableEffectDisposable का नाम बदलकर DisposaleEffectResult कर दिया गया (Ica7c6)
Recomposer.current() को हटाया गया. [Abstract]ComposeView अब डिफ़ॉल्ट रूप से, विंडो के लिए ViewTreeLifecycleOwner के ज़रिए, विंडो के स्कोप वाले Recomposers को बनाता है. होस्ट के लाइफ़साइकल के रुकने पर, फिर से कॉम्पोज़ करने की प्रोसेस और withFrameNanos पर आधारित ऐनिमेशन टिक रुक जाते हैं. (I38e11)
Recomposer.runningRecomposers अब रीड-ओनली RecomposerInfo का ग्लोबल StateFlow उपलब्ध कराता है. इससे, कॉम्पोज़िशन की प्रोसेस के दौरान, कॉम्पोज़िशन की मौजूदा स्थिति को देखा जा सकता है. Recomposer.current() के बजाय, इस एपीआई का इस्तेमाल करें. Recomposer.current() अब काम नहीं करता. (If8ebe)
DisposableEffectDisposable का नाम बदलकर DisposaleEffectResult (I3ea68) कर दिया गया
वर्शन 1.0.0-alpha11
28 जनवरी, 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
रिलीज़ हो गया है. 1.0.0-alpha11 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- SideEffect और DisposableEffect API के पक्ष में, onCommit, onDispose, और onActive को बंद कर दिया गया है (If760e)
- emit() एपीआई और सभी ओवरलोड को बंद कर दिया गया है और उनका नाम बदलकर ComposeNode कर दिया गया है. एपीआई एक जैसे हैं, बस नाम अलग है, ताकि Compose (I4137b) के नाम रखने के नियमों का पालन किया जा सके
- invalidate और compositionReference() फ़ंक्शन अब काम नहीं करते. इनकी जगह, currentRecomposeScope और rememberCompositionReference फ़ंक्शन का इस्तेमाल करें. (I583a8)
RememberObserver, CompositionLifecycleObserver की जगह लेता है और CompositionLifecycleObserver अब काम नहीं करता.
RememberObserver
, बदले गए सेमेटिक्स और बदले गए नाम वाले तरीकों के साथ,CompositionLifecycleObserver
की जगह लेता है. नए एपीआई पर स्विच करने की प्रोसेस, उन ऑब्जेक्ट के लिए अपने-आप की जा सकती है जिन्हें सिर्फ़ एक बार याद रखा जाता है. यह सुझाया गया तरीका है और आगे भी रहेगा. हालांकि, अगर किसी कॉम्पोज़िशन में किसी रेफ़रंस को एक से ज़्यादा बार याद किया गया है, तो हर रेफ़रंस के लिएonRemembered
को कॉल किया जाता है, जबकिonEnter
को सिर्फ़ एक बार कॉल किया जाता है. अगर ऑब्जेक्ट का इस्तेमाल सब-कंपोज़िशन में किया गया था, तोonEnter
को कई बार कॉल किया गया था. जैसे,WithConstraints
औरScaffold
. इससे,onEnter
कॉल की गारंटी अविश्वसनीय हो गई और इसेRememberObserver
के लिए हटा दिया गया.RememberObserver
,onAbandoned
जोड़ता है. इसे तब कॉल किया जाता है, जबRememberObserver
इंस्टेंस,remember
को पास किए गए कॉलबैक से वापस आता है, लेकिन कंपोज़िशन स्टेटस में उसे याद नहीं रखा गया था. इसलिए,onRemembered
को कभी कॉल नहीं किया जाएगा. ऐसा तब हो सकता है, जब कोई अपवाद कॉम्पोज़िशन को पूरा होने से पहले ही खत्म कर दे या कॉम्पोज़िशन को इसलिए खारिज कर दिया जाए, क्योंकि वह स्थिति अब मौजूद नहीं है या अब उसकी ज़रूरत नहीं है. अगर ऊपर दिए गए एक रेफ़रंस के सुझाव के बाद,RememberObserver
का इंस्टेंस किसी बाहरी संसाधन को ट्रैक कर रहा है, तोonForgotten
औरonAbandoned
, दोनों से पता चलता है कि अब संसाधन की ज़रूरत नहीं है. अगर ऑब्जेक्ट,onRemembered
में शुरू किए गए काम या आवंटित किए गए संसाधनों को ट्रैक कर रहा है, तोonAbandoned
को अनदेखा किया जा सकता है. ऐसा इसलिए, क्योंकिonRemembered
को कॉल करने पर इसे कॉल नहीं किया जाएगा. (I02c36)collectAsState()
फ़ंक्शन को इनलाइन के तौर पर मार्क न करें (Ia73e4)
गड़बड़ियां ठीक की गईं
- WithConstraints को BoxWithConstraints के तौर पर फिर से तैयार किया गया और foundation.layout में ले जाया गया. (I9420b, b/173387208)
- टेस्टिंग में TestCoroutineDispatcher का इस्तेमाल करना (I532b6)
वर्शन 1.0.0-alpha10
13 जनवरी, 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
रिलीज़ हो गया है. 1.0.0-alpha10 वर्शन में ये बदलाव शामिल हैं.
बदलाव
इंटरनल कंपाइलर एपीआई को फिर से व्यवस्थित करने से, कंपोज़िशन के "बदलाव लागू करें" चरण में, कंपोज़िशन की वजह से जनरेट हुए नोड में बदलावों को एक साथ लागू किया जा सकता है. ऐसा सभी
@Composable
फ़ंक्शन के पूरा हो जाने के बाद किया जा सकता है.यह बदलाव, व्यवहार में काफ़ी बदलाव ला सकता है. इससे ऐप्लिकेशन कोड पर असर पड़ सकता है, क्योंकि बदलाव लागू होने तक, इंटरनल और एक्सपेरिमेंटल एपीआई से नोड उपलब्ध नहीं होंगे. आम तौर पर, इस समस्या को हल करने के लिए, कोड को
SideEffect
कॉम्पोज़ेबल में ऐसी डिपेंडेंसी के साथ रखा जाता है. इससे, कोड को तब तक लागू नहीं किया जाता, जब तक कि नोड बनकर शुरू नहीं हो जाते. (I018da)
एपीआई में हुए बदलाव
- इस बात को ट्रैक करने का एक तरीका जोड़ा गया है कि रीकंपोज़र ने बदलाव लागू किए हैं या नहीं. (I1b3e2)
[Abstract]ComposeView API को बड़ा करें, ताकि Compose पर आधारित व्यू को रीसाइकल किया जा सके. साथ ही, बाद में फिर से बनाने के लिए, उनके कॉम्पोज़िशन को हटाया जा सके. चाइल्ड कंपोजिशन बनाने के लिए, विंडो के स्कोप वाले Recomposers और CompositionReferences को इंस्टॉल और खोजने के लिए एपीआई जोड़ें.
[Abstract]ComposeViews की कंपोज़िशन हटाने की रणनीति को कॉन्फ़िगर करने के लिए, ViewCompositionStrategy जोड़ें; डिफ़ॉल्ट तौर पर, विंडो को अलग करने पर कंपोज़िशन हट जाता है. (I860ab)
गड़बड़ियां ठीक की गईं
- Recomposer अब अपनी मौजूदा स्थिति का फ़्लो दिखाता है. इससे, इसकी गतिविधि और उससे जुड़े इफ़ेक्ट की गतिविधि को मॉनिटर किया जा सकता है. (Ifb2b9)
- नेटिव keyEvent को अब keyEvent.nativeKeyEvent (I87c57, b/173086397) की मदद से ऐक्सेस किया जा सकता है
वर्शन 1.0.0-alpha09
16 दिसंबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
रिलीज़ हो गया है. 1.0.0-alpha09 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
पब्लिक एपीआई से SlotTable, SlotReader, और SlotWriter को हटाया गया. इन्हें पहले, InternalComposeAPI के तौर पर मार्क किया गया था. अब ये कॉम्पोनेंट, कॉम्पोज़ मॉड्यूल के लिए इंटरनल हैं.
CompositionData और CompositionGroup को ui-tooling API के बदले जोड़ा गया था, ताकि कॉम्पोज़िशन की जानकारी निकाली जा सके. ये सार्वजनिक हैं, लेकिन इन्हें ui-tooling API के बाहर इस्तेमाल करने के लिए नहीं बनाया गया है. ऐसा इसलिए है, क्योंकि ये ऐसी रॉ जानकारी देते हैं जिसे ui-tooling API समझता है (I31a9c)
Applier क्लास को अब (Id85b0) नहीं माना जाता
Applier
इंटरफ़ेस को बदला गया है, ताकि ट्री को ऊपर से नीचे के बजाय, नीचे से ऊपर की ओर आसानी से बनाया जा सके.insert()
तरीके का नाम बदलकरinsertTopDown()
कर दिया गया है.insertBottomUp()
नाम का एक नया तरीका जोड़ा गया.लागू करने वाला,
insertTopDown()
याinsertBottomUp()
का इस्तेमाल करके, उस ट्री में नोड डालता है जिसमें बदलाव किया जा रहा है. यह इस बात पर निर्भर करता है कि कौनसा बेहतर परफ़ॉर्म करता है.LayoutNode
औरView
जैसे कुछ ट्री, टॉप-डाउन के मुकाबले, बॉटम-अप तरीके से बनाने के लिए ज़्यादा असरदार होते हैं. इस बदलाव से पहले, सबसे नीचे से ऊपर की ओर लागू करने के लिए, इंसर्ट का एक स्टैक ज़रूरी था. इसे हर उस ऐप्लिकेशन में कॉपी करना पड़ता था जिसे परफ़ॉर्मेंस के लिए सबसे नीचे से ऊपर की ओर लागू करने की ज़रूरत होती थी. इस बदलाव के बाद,Applier
, ट्री व्यू को नीचे से ऊपर की ओर बनाने के लिएinsertBottomUp()
को बदल देता है. साथ ही,insertTopDown()
, ट्री व्यू को ऊपर से नीचे की ओर बनाने के लिएinsertBottomUp()
को बदल देता है. (Icbdc2)Compose, प्रॉपर्टी पाने वाले फ़ंक्शन के साथ काम करता है. ये फ़ंक्शन, कॉम्पोज़ेबल को कॉल कर सकते हैं. इस सुविधा का इस्तेमाल जारी रहेगा. हालांकि, प्रॉपर्टी के गेट्टर को @Composable के तौर पर घोषित करने का सिंटैक्स बदल रहा है.
ऐसा करने के लिए, प्रॉपर्टी में एनोटेशन जोड़ने का सिंटैक्स अब काम नहीं करता:
@Composable val someProperty: Int get() = ...
ऐसा करने के लिए, प्रॉपर्टी के गटर पर एनोटेट करें. यह सिंटैक्स अब सही है:
val someProperty: Int @Composable get() = ...
दोनों सिंटैक्स कुछ समय तक काम करेंगे, लेकिन काम न करने वाला पुराना सिंटैक्स, आखिरकार कंपाइल करने से जुड़ी गड़बड़ी बन जाएगा. (Id9197)
गड़बड़ियां ठीक की गईं
- AndroidOwner ने अंदरूनी तौर पर बनाया (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) को इंटरनल बनाया गया (Id724a)
वर्शन 1.0.0-alpha08
2 दिसंबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
रिलीज़ हो गया है. 1.0.0-alpha08 वर्शन में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- Compose के दिशा-निर्देशों के मुताबिक, कॉम्पोज़ेबल लैंब्डा पैरामीटर के नाम और पोज़िशन की जांच करने के लिए, लिंट की जांच जोड़ी गई है.
हमने कुछ एपीआई को भी माइग्रेट किया है. इनमें, लैम्ब्डा फ़ंक्शन के आखिर में
children
के तौर पर इस्तेमाल किए गए नाम कोcontent
में बदला गया है. यह बदलाव, लिंट की जांच और दिशा-निर्देशों के मुताबिक किया गया है. (Iec48e) - Recomposer अब EmbeddingContext स्वीकार नहीं करता. ज़रूरी शेड्यूलिंग डिपेंडेंसी, effectCoroutineContext से मिलती हैं. FrameManager अब काम नहीं करता. प्लैटफ़ॉर्म इंटिग्रेशन को अपने ग्लोबल स्नैपशॉट को मैनेज करने की सुविधा शुरू करनी चाहिए. (I02369)
- RestorableStateHolder.withRestorableState फ़ंक्शन का नाम बदलकर RestorableStateProvider कर दिया गया (I66640)
गड़बड़ियां ठीक की गईं
Ambient
को सफ़िक्स के तौर पर इस्तेमाल करके बनाए गए ऐंबियंट को बंद कर दिया गया है. साथ ही, उन्हें ऐंबियंट के प्रीफ़िक्स वाली नई प्रॉपर्टी से बदल दिया गया है. ऐसा, ऐंबियंट और Compose API के अन्य दिशा-निर्देशों के मुताबिक किया गया है. (I33440)- पुराने ui-test मॉड्यूल और उसके स्टब (I3a7cb) हटाएं
वर्शन 1.0.0-alpha07
11 नवंबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha07
रिलीज़ हो गया है. 1.0.0-alpha07 वर्शन में ये कमिट शामिल हैं.
नई सुविधाएं
एपीआई में हुए बदलाव
@UnionType
एनोटेशन का इस्तेमाल बंद कर दिया गया है (I57cde)- provideDefault को ऐंबियंट वैल्यू देने के विकल्प के तौर पर जोड़ा गया था. इसका इस्तेमाल, ऐंबियंट वैल्यू तय करने के लिए किया जा सकता है. यह वैल्यू सिर्फ़ तब सेट की जाएगी, जब पहले से कोई ऐंबियंट वैल्यू न दी गई हो. (Id6635, b/171024925)
- SideEffect और DisposableEffect एपीआई के साथ एक जैसा बने रहने के लिए, LaunchedTask का नाम बदलकर LaunchedEffect कर दिया गया है. सबसे सही तरीकों को बढ़ावा देने के लिए, बिना विषय पैरामीटर वाले LaunchedEffect का इस्तेमाल करने की अनुमति नहीं है. (Ifd3d4)
- अब लागू करने वाले टूल में, बदलाव शुरू होने/खत्म होने पर कॉलबैक ट्रिगर करने की सुविधा है. ज़रूरत पड़ने पर, इनका इस्तेमाल रिसॉर्स मैनेजमेंट के लिए किया जा सकता है. (Icf476)
- रीकंपोज़र को अब कॉन्स्ट्रक्शन के समय CoroutineContext की ज़रूरत होती है (Ic4610)
- SlotTable को लागू करने के तरीके में किए गए बदलाव, जिनका असर सार्वजनिक एपीआई पर नहीं पड़ना चाहिए. (If9828)
- ऐसे rxjava2 अडैप्टर हटा दिए गए हैं जो शुरुआती वैल्यू नहीं लेते (Idb72f)
गड़बड़ियां ठीक की गईं
- foundation.Text का इस्तेमाल बंद कर दिया गया है और इसे material.Text से बदल दिया गया है. अगर आपको कोई ऐसा बुनियादी टेक्स्ट एपीआई चाहिए जो किसी थीम की वैल्यू का इस्तेमाल न करता हो, तो androidx.compose.foundation.BasicText देखें. (If64cb)
- BaseTextField अब काम नहीं करता. इसके बजाय, BasicTextField का इस्तेमाल करें. (I896eb)
- लेआउट से जुड़े कई सिंबल को androidx.compose.ui से androidx.compose.layout.ui में ले जाया गया. (I0fa98, b/170475424)
बाहरी योगदान
- लिखने के लिए
runtime-rxjava3
मॉड्यूल जोड़ा गया.runtime-rxjava2
(I02cbf) से मिलता-जुलता
वर्शन 1.0.0-alpha06
28 अक्टूबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
रिलीज़ हो गया है. 1.0.0-alpha06 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Recomposer अब एक CompositionReference और मान्य कॉम्पोज़िशन पैरंट है. अब साफ़ तौर पर फिर से कॉम्पोज़र करने की ज़रूरत कम जगहों पर पड़ती है. (I4036f)
- SideEffect में DisposableEffect का एपीआई जोड़ा गया है. यह एपीआई, पैरामीटर के साथ onCommit की भूमिका निभाता है. हालांकि, इसके लिए onDispose ज़रूरी है.
- rememberUpdatedState API जोड़ा गया है, ताकि डेटा को फिर से कॉम्पोज़ करने से लेकर, DisposableEffects या LaunchedTasks जैसी चल रही या लंबे समय तक चलने वाली प्रोसेस में पब्लिश किया जा सके.
- (Id50b9)
- MutableVector अब RandomAccess को लागू करता है (I85d73, b/170461551)
- कंपोज़िशन के मैनेज किए जा रहे ऑब्जेक्ट पर, कंपोज़िशन के साइड इफ़ेक्ट लागू करने के लिए, SideEffect composable जोड़ा गया. SideEffect का मकसद, onCommit कॉम्पोज़ेबल को बदलना है. (Ia77c2)
- एक्सपेरिमेंट के तौर पर उपलब्ध नया एपीआई, RestorableStateHolder. इससे, सबट्री को हटाने से पहले, [savedInstanceState] और [rememberSavedInstanceState] से तय की गई स्थिति को सेव किया जा सकता है. इससे, अगली बार उसे वापस उस स्थिति में कॉम्पोज़ किया जा सकता है. (I66884, b/166586419)
गड़बड़ियां ठीक की गईं
- ComposeTestRule में ट्रांज़िशन चालू करें; ComposeTestRule से, ब्लिंक करने वाले कर्सर को चालू करने का विकल्प हटाएं. (If0de3)
वर्शन 1.0.0-alpha05
14 अक्टूबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha05
रिलीज़ हो गया है. 1.0.0-alpha05 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- एक्सपेरिमेंटल Modifier.pointerInput, इनपुट मॉडिफ़ायर को निलंबित करता है (Ia77d2)
- हर स्क्रोल पर सब-कंपोज़िशन में कम काम करके, LazyColumn/Row की स्क्रोलिंग परफ़ॉर्मेंस को बेहतर बनाया जाता है. कम्पोज़िशन क्लास के लिए, hasInvalidations() का नया तरीका जोड़ा गया. Recomposer के hasPendingChanges() तरीके का नाम बदलकर hasInvalidations() कर दिया गया (Ib2f32, b/168293643, b/167972292, b/165028371)
- कॉम्पोज़िशन से ऐसे कोरुटिन लॉन्च करने के लिए, produceState API जोड़ें जो समय के साथ किसी एक
State<T>
वैल्यू को अपडेट करते हैं (Id4a57) - Compose API के दिशा-निर्देशों के मुताबिक, launchInComposition का नाम बदलकर LaunchedTask कर दिया गया है (I99a8e)
- कस्टम लेआउट में, place() कॉल के क्रम से अब बच्चों के लिए ड्रॉइंग का क्रम तय होता है (Ibc9f6)
वर्शन 1.0.0-alpha04
1 अक्टूबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
रिलीज़ हो गया है. 1.0.0-alpha04 वर्शन में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- OwnerScope जोड़ा गया, ताकि लेआउट और ड्रॉइंग के ऑब्ज़र्वेशन स्कोप को इकट्ठा किया जा सके, जब वे अब मान्य न हों. (Ic4cf8)
- कैलकुलेशन के आधार पर स्टेटस ऑब्जेक्ट बनाने के लिए, derivedStateOf API जोड़ा गया. यह कैलकुलेशन, दूसरे स्टेटस ऑब्जेक्ट को पढ़ सकता है और उनसे डेटा ले सकता है (If758b)
- SnapshotStateObserver के लिए TestOnly API जोड़ा गया (I6e2a9)
गड़बड़ियां ठीक की गईं
- foundation.Box का इस्तेमाल बंद कर दिया गया है. इसके बजाय, कृपया foundation.layout.Box का इस्तेमाल करें. (Ie5950, b/167680279)
वर्शन 1.0.0-alpha03
16 सितंबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha03
रिलीज़ हो गया है. 1.0.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
CompositionCoroutineScope
अबMonotonicFrameClock
को लागू नहीं करता.withFrameNanos
को कॉल करने वाले को, टॉप-लेवल फ़ंक्शन को साफ़ तौर पर इंपोर्ट करना चाहिए. (Icb642, b/166778123)
गड़बड़ियां ठीक की गईं
onNode
याwaitForIdle
जैसे ग्लोबल टेस्टिंग फ़ंक्शन अब काम नहीं करते. कृपया ComposeTestRule (I7f45a) पर बताए गए नए फ़ंक्शन पर माइग्रेट करेंlaunchInComposition
अब बिना डिस्पैच किए गए कोरूटीन लॉन्च नहीं करता (Ief6af, b/166486000)
वर्शन 1.0.0-alpha02
2 सितंबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
रिलीज़ हो गया है. 1.0.0-alpha02 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- स्नैपशॉट डेटा में हुए बदलावों को इस्तेमाल करने और उनमें बदलाव करने के लिए,
snapshotFlow
औरwithMutableSnapshot
एपीआई जोड़ें. (I3e722) कॉम्पोज़ेबल फ़ंक्शन के लिए कॉल करने का तरीका बदल गया है. यह बदलाव, बाइनरी में किया गया है. Compose कंपाइलर प्लग इन के इस वर्शन के साथ काम करने के लिए, सभी लाइब्रेरी को फिर से कंपाइल करना होगा.
इस बदलाव से सोर्स लेवल पर कोई बदलाव नहीं होता, क्योंकि सिर्फ़ ऐसे कंपाइलर एपीआई में बदलाव किया गया है जिनके लिए साफ़ तौर पर ऑप्ट इन किया गया है. (I7afd2, b/158123185)
EmbeddingContext (I7b9be) से शेड्यूल करने के तरीके हटाए गए
onPreCommit का इस्तेमाल नहीं किया जा सकता. अब onCommit में onPreCommit की सुविधाएं उपलब्ध हैं.
onCommit और onActive अब उसी कोरियोग्राफ़र फ़्रेम में चलते हैं जिसमें कॉम्पोज़िशन में बदलाव किए गए हैं. ये अगले कोरियोग्राफ़र फ़्रेम की शुरुआत में नहीं चलते. (I70403)
वर्शन 1.0.0-alpha01
26 अगस्त, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
रिलीज़ हो गया है. 1.0.0-alpha01 वर्शन में ये कमिट शामिल हैं.
वर्शन 0.1.0-dev
वर्शन 0.1.0-dev17
19 अगस्त, 2020
androidx.compose.runtime:runtime-*:0.1.0-dev17
रिलीज़ हो गया है. 0.1.0-dev17 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- कस्टम उत्सर्जन अब यह बता सकते हैं कि उसके एक या एक से ज़्यादा सेटर को छोड़ा जा सकता है और उत्सर्जन से अलग तरीके से फिर से बनाया जा सकता है. (Ibbd13)
अब इस्तेमाल में न होने वाले FrameManager कॉल हटा दिए गए हैं.
mutableStateof()
(I80ba6) जैसे स्टेटस ऑब्जेक्ट को ट्रैक करने के लिए, ओवरहेड की मात्रा को कम करने के लिए, इंटरनल कंपोज एपीआई बदले गए हैंstate { ... }
कॉम्पोज़ेबल का इस्तेमाल अब नहीं किया जा सकता. इसके बजाय,remember { mutableStateOf(...) }
को साफ़ तौर पर कॉल करें. इससे, एपीआई के पूरे प्लैटफ़ॉर्म और स्टेटस मैनेजमेंट के लिए कॉन्सेप्ट की संख्या कम हो जाती है. साथ ही, यह क्लास प्रॉपर्टी के डेलिगेशन के लिएby mutableStateOf()
पैटर्न से मेल खाता है. (Ia5727)Flow.collectAsState अब डिफ़ॉल्ट रूप से Dispatchers.Main पर सेट होने के बजाय, कॉम्पोनिशन से डिफ़ॉल्ट डिस्पैचर तय करता है. (I9c1d9)
for लूप में स्टेटस सेव करने वाली किसी चीज़ का इस्तेमाल करने पर क्रैश होने की समस्या को ठीक किया गया है. अब savedInstanceState() में एक ही कुंजी का इस्तेमाल किया जा सकता है. UiSavedStateRegistry के एपीआई को इस नई ज़रूरत के हिसाब से अडजस्ट कर दिया गया है (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
गड़बड़ियां ठीक की गईं
emitView
का अब इस्तेमाल नहीं किया जा सकता. अगर हो सके, तो Compose में व्यू दिखाने के लिएAndroidView
का इस्तेमाल करें. ध्यान दें कि आने वाले समय में, सीधे तौर पर व्यू और व्यू ग्रुप को कंपोज़ नहीं किया जा सकेगा. ऐसा तब तक नहीं किया जा सकेगा, जब तक कि ये कंपोज़िशन ट्री में लीफ़ न हों. ऐसा AndroidView का इस्तेमाल करके किया जा सकता है. (I29b1e, b/163871221)
वर्शन 0.1.0-dev16
5 अगस्त, 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
रिलीज़ हो गया है. 0.1.0-dev16 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
mutableStateOf()
,ambientOf()
, औरsavedInstanceStateOf()
के लिए, डिफ़ॉल्ट तौर पर लागू होने वाली म्यूटेशन नीति कोreferentialEqualityPolicy()
के बजायstructuralEqualityPolicy()
पर सेट कर दिया गया है.mutableStateOf()
इंस्टेंस को असाइन की गई नई वैल्यू को बदलाव माना जाएगा या नहीं, यह तय करने के लिए डिफ़ॉल्ट रूप से===
के बजाय==
का इस्तेमाल किया जाएगा.https://kotlinlang.org/docs/reference/equality.html देखें
ambientOf()
औरsavedInstanceStateOf()
, अपने लागू करने के तरीके मेंmutableStateOf()
का इस्तेमाल करते हैं. इसलिए, उन्हेंmutableStateOf()
के मुताबिक बदला गया है.स्ट्रक्चरल इक्विलिटी का इस्तेमाल करने से, डेवलपर की उम्मीदों के मुताबिक नतीजे मिलते हैं.
उदाहरण के लिए,
val state = mutableStateOf(1f)
इसके बाद,
state.value = 1f
को
state
में बदलाव नहीं माना जाएगा. साथ ही, कंपोज़िशन के दौरानstate
का इस्तेमाल करने पर, उसे फिर से कंपोज़ करने की ज़रूरत नहीं होगी.यह एक बड़ा बदलाव है. हालांकि, ज़्यादातर मामलों में (
equals()
को बदलने वाली क्लास का इस्तेमाल करने पर), इसका किसी ऐप्लिकेशन पर कोई असर नहीं पड़ेगा.data
क्लास जैसीequals()
को ओवरराइड करने वाली क्लास की परफ़ॉर्मेंस में गिरावट दिख सकती है. ऐसा इसलिए, क्योंकिmutableStateOf()
को असाइन करने पर, अब डिफ़ॉल्ट रूप से उनकेequals()
मेथड को कॉल किया जाता है.mutableStateOf()
,ambientOf()
, औरsavedInstanceStateOf()
पर किए जाने वाले कॉल में नीति पैरामीटरpolicy = referentialEqualityPolicy()
जोड़कर, कॉल के पिछले व्यवहार को वापस लाया जा सकता है. (Ic21a7)Row
औरColumn
अब इनलाइन फ़ंक्शन हैं. इनका इस्तेमाल करने में होने वाले खर्च को काफ़ी कम किया जा सकता है. (I75c10)
गड़बड़ियां ठीक की गईं
- setViewContent अब काम नहीं करता. इसके बजाय, setContent का इस्तेमाल किया जाना चाहिए. (I7e497, b/160335130)
MonotonicFrameAnimationClock जोड़ा गया है. इससे, MonotonicFrameClock को AnimationClockObservable के तौर पर इस्तेमाल किया जा सकता है. इससे, कोरोटिन पर आधारित नई क्लॉक और एपीआई के बीच के अंतर को कम करने में मदद मिलती है. एपीआई अब भी कॉलबैक पर आधारित पुरानी क्लॉक का इस्तेमाल करते हैं.
ManualAnimationClock के बराबर का MonotonicFrameClock अब ManualFrameClock है. (I111c7, b/161247083)
Modifier.stateDraggable को पूरी तरह से बदल दिया गया है और इसका नाम बदलकर Modifier.swipeable कर दिया गया है. SwipeableState की एक नई क्लास को पेश किया गया था. साथ ही, DrawerState और BottomDrawerState को फिर से तैयार किया गया, ताकि इनमें इस क्लास का इस्तेमाल किया जा सके. [Modal/Bottom]DrawerLayout अब onStateChange पैरामीटर नहीं लेता. (I72332, b/148023068)
Modifier.plus को बंद कर दिया गया है. इसके बजाय, Modifier.then का इस्तेमाल करें. 'इसके बाद' में क्रम से लगाने का सिग्नल ज़्यादा होता है. साथ ही, इसमें
Modifier.padding().background() + anotherModifier
टाइप करने की अनुमति नहीं होती, जिससे चेन टूट जाती है और उसे पढ़ना मुश्किल हो जाता है (Iedd58, b/161529964)SubcomposeLayout जोड़ा गया है. यह एक लो लेवल प्रिमिटिव है, जो मेज़रमेंट के दौरान चाइल्ड को कॉम्पोज़ करने की अनुमति देता है. ऐसा तब किया जाता है, जब हमें सबट्री कॉम्पोज़िशन के लिए, मेज़रमेंट के दौरान ही उपलब्ध कुछ वैल्यू का इस्तेमाल करना हो. उदाहरण के लिए, SubcomposeLayout का इस्तेमाल करके, WithConstraints लागू नहीं किया जाता. (I25cc8)
Material FilledTextField का नाम बदलकर TextField कर दिया गया है. साथ ही, फ़ाउंडेशनल TextField का नाम बदलकर BaseTextField कर दिया गया है, ताकि सबसे आसान एपीआई को आसानी से खोजा और इस्तेमाल किया जा सके (Ia6242, b/155482676)
Modifier.drawBackground का नाम बदलकर Modifier.background कर दिया गया है (I13677)
वर्शन 0.1.0-dev15
22 जुलाई, 2020
androidx.compose.runtime:runtime-*:0.1.0-dev15
रिलीज़ हो गया है. 0.1.0-dev15 वर्शन में ये बदलाव शामिल हैं.
डिपेंडेंसी से जुड़ा अपडेट
- Compose के
0.1.0-dev15
वर्शन का इस्तेमाल करने के लिए, आपको डिपेंडेंसी का एलान करना में ऊपर दिखाए गए नए कोड स्निपेट के हिसाब से, अपनी डिपेंडेंसी अपडेट करनी होंगी.
एपीआई में हुए बदलाव
@Model
एनोटेशन का अब इस्तेमाल नहीं किया जा सकता. इसके विकल्प के तौर पर, state और mutableStateOf का इस्तेमाल करें. इस सुविधा को बंद करने का फ़ैसला, बहुत सावधानी से की गई चर्चा के बाद लिया गया है.वजह बताएं
इसमें ये शामिल हैं, लेकिन इनके अलावा और भी चीज़ें शामिल हो सकती हैं:
- एपीआई के बारे में कम जानकारी देनी पड़ती है और कम कॉन्सेप्ट सिखाने पड़ते हैं
- यह अन्य टूलकिट (Swift UI, React, Flutter) के साथ ज़्यादा मिलता-जुलता है
- ऐसा फ़ैसला जिसे बदला जा सकता है. हम
@Model
को बाद में कभी भी वापस ला सकते हैं. @Model
को कॉन्फ़िगर करने के बारे में, मुश्किल सवालों के जवाब देने और असामान्य मामलों में इस्तेमाल करने की ज़रूरत नहीं पड़ती@Model
डेटा क्लास, equals, hashcode वगैरह.- कुछ प्रॉपर्टी “निगरानी में” कैसे हैं और कुछ नहीं?
- मैं निगरानी में इस्तेमाल किए जाने वाले स्ट्रक्चरल बनाम रेफ़रंसल इक्विलिटी की जानकारी कैसे दूं?
- इससे सिस्टम में “मैजिक” कम हो जाता है. इससे, किसी व्यक्ति के यह मानने की संभावना कम हो जाएगी कि सिस्टम असल में जितने स्मार्ट है उससे ज़्यादा स्मार्ट है. जैसे, उसे सूची में अंतर करने का तरीका पता है
- इससे, डेटा को बारीकी से समझना आसान हो जाता है.
- क्लास में वैरिएबल -> प्रॉपर्टी से, रीफ़ैक्ट करने की सुविधा को बेहतर बनाता है
- इससे, राज्य के हिसाब से ऑप्टिमाइज़ेशन करने की संभावनाएं बढ़ती हैं
- यह बाकी इकोसिस्टम के साथ ज़्यादा मिलता-जुलता है. साथ ही, यह बदलाव न किए जा सकने वाले या “बदलाव किए जा सकने वाले स्टेटस को अपनाने” के बारे में किसी तरह की गलतफ़हमी को कम करता है
माइग्रेशन के बारे में जानकारी
@Model
के मौजूदा सभी इस्तेमालों को दो में से किसी एक तरीके से आसानी से बदला जा सकता है. नीचे दिए गए उदाहरण में, सिर्फ़ उदाहरण के लिए दो प्रॉपर्टी वाली@Model
क्लास है. साथ ही, इसका इस्तेमाल किसी कॉम्पोज़ेबल में किया जा रहा है.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
पहला विकल्प:
State<OriginalClass>
का इस्तेमाल करके कॉपी बनाएं.Kotlin की डेटा क्लास की मदद से, यह तरीका आसानी से अपनाया जा सकता है. असल में, पहले की सभी
var
प्रॉपर्टी को डेटा क्लास कीval
प्रॉपर्टी में बदलें. इसके बाद,remember
के बजायstate
का इस्तेमाल करें. साथ ही, डेटा क्लासcopy(...)
के सुविधाजनक तरीके का इस्तेमाल करके, ओरिजनल की क्लोन की गई कॉपी में स्टेटस वैल्यू असाइन करें.यह ध्यान रखना ज़रूरी है कि यह तरीका सिर्फ़ तब काम करता है, जब उस क्लास में सिर्फ़ वही बदलाव किए गए हों जिनका दायरा वही हो जिसमें
State
इंस्टेंस बनाया गया है. अगर क्लास, इस्तेमाल के दायरे से बाहर अपने-आप बदल रही है और आपने इसकी निगरानी की है, तो आपको अगले तरीके का इस्तेमाल करना होगा.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
दूसरा विकल्प: mutableStateOf और प्रॉपर्टी डेलीगेट का इस्तेमाल करना
Kotlin के प्रॉपर्टी डेलिगेट और
mutableStateOf
एपीआई की मदद से, इस तरीके को आसान बनाया गया है. इसकी मदद से, कॉम्पोज़िशन के बाहर MutableState इंस्टेंस बनाए जा सकते हैं. मूल क्लास की सभीvar
प्रॉपर्टी कोvar
प्रॉपर्टी से बदलें. साथ ही,mutableStateOf
को प्रॉपर्टी के प्रतिनिधि के तौर पर सेट करें. इसका फ़ायदा यह है कि क्लास के इस्तेमाल में कोई बदलाव नहीं होगा. सिर्फ़ इसके अंदरूनी लागू होने का तरीका बदलेगा. हालांकि, यह व्यवहार मूल उदाहरण से पूरी तरह मेल नहीं खाता, क्योंकि अब हर प्रॉपर्टी को अलग-अलग निगरानी/सदस्यता दी जाती है. इसलिए, इस रीफ़ैक्टर के बाद आपको दिखने वाले रीकंपोज़िशन, ज़्यादा सीमित हो सकते हैं.class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Compose के कंपाइलर की कोड जनरेशन की रणनीति में बदलाव करता है. बदलाव से पहले, Compose कंपाइलर कॉल को कंपोज करने लायक फ़ंक्शन में बदल देता था. इस बदलाव के बाद, हम किसी कॉम्पोज़ेबल फ़ंक्शन के मुख्य हिस्से में बदलाव करते हैं. हालांकि, कॉल साइट में ज़्यादातर मामलों में कोई बदलाव नहीं किया जाता.
इसका मतलब है कि Compose रनटाइम के साथ काम करने वाला ज़्यादातर लॉजिक, कॉल साइट के बजाय फ़ंक्शन के मुख्य हिस्से की शुरुआत में होता है.
यह बदलाव, कॉम्पोज़ करने के सभी तरीकों के लिए, सोर्स के साथ काम करना चाहिए. इस बदलाव के बाद, Compose का इस्तेमाल करने वाले ज़्यादातर लोगों को कोई कोड अपडेट करने की ज़रूरत नहीं पड़ेगी.
इस काम को पूरा करने के लिए, सभी कंपोजेबल फ़ंक्शन के JVM सिग्नेचर में बदलाव किया गया है. एक पैरामीटर को स्वीकार करने वाले कॉम्पोज़ेबल फ़ंक्शन को, तीन पैरामीटर को स्वीकार करने वाले फ़ंक्शन में बदल दिया जाता है. अतिरिक्त पैरामीटर, कंपोजर, एक 'की' इंटिजर होते हैं. यह एक बिटमास्क इंटिजर होता है, जिसका इस्तेमाल कॉल के ज़रिए मेटाडेटा को प्रसारित करने के लिए किया जाता है.
अब Compose, डिफ़ॉल्ट आर्ग्युमेंट को भी कंपोज किए जा सकने वाले फ़ंक्शन में बदल देता है. यह फ़ंक्शन, अपने-आप अतिरिक्त सिंथेटिक डिफ़ॉल्ट ओवरलोड को शामिल किए बिना ऐसा करता है. इसलिए, इस बदलाव के बाद कम फ़ंक्शन तय किए जाएंगे.
इस वजह से, व्यवहार में जान-बूझकर किए गए ये बदलाव हो सकते हैं:
- कुछ कॉल ऐसे होंगे जिन्हें पहले स्किप नहीं किया जाता था
- डिफ़ॉल्ट आर्ग्युमेंट एक्सप्रेशन में, कॉम्पोज़ेबल एक्सप्रेशन की अब सही तरीके से सदस्यता ली जाती है और उन्हें मैनेज किया जाता है
इस काम में कुछ ऑप्टिमाइज़ेशन शामिल थे: 1. पैरामीटर की तुलना का नतीजा, कॉल ग्राफ़ के ज़रिए अन्य कॉम्पोज़ेबल फ़ंक्शन में भेजा जाता है. इससे रनटाइम के दौरान कम तुलनाएं होंगी और स्लॉट टेबल का साइज़ कम हो जाएगा. साथ ही, ऐसे कॉम्पोज़ेबल फ़ंक्शन को भी स्किप किया जा सकेगा जिन्हें पहले स्किप नहीं किया जाता था 2. जिन पैरामीटर को कंपाइल के समय “स्टैटिक” माना जाता है उनकी तुलना अब रनटाइम में नहीं की जाती या उन्हें स्टोर नहीं किया जाता. इससे तुलना की संख्या कम हो जाती है और स्लॉट टेबल का साइज़ भी कम हो जाता है. 3. जनरेट किए गए ग्रुप की संख्या को कम करने के लिए, फ़ंक्शन के मुख्य हिस्से के कंट्रोल फ़्लो स्ट्रक्चर का इस्तेमाल किया जाता है. इससे स्लॉट टेबल का साइज़ कम हो जाता है और रनटाइम 4 को कम काम करना पड़ता है. अगर फ़ंक्शन के बॉडी में इस्तेमाल नहीं किए गए डिस्पैच और रिसीवर पैरामीटर का इस्तेमाल नहीं किया जाता है, तो फ़ंक्शन को स्किप किया जा सकता है या नहीं, यह तय करने में इन पैरामीटर को शामिल नहीं किया जाता.
ज़्यादातर बदलाव उन एपीआई के लिए किए गए थे जिन्हें कंपाइलर सीधे तौर पर टारगेट करता है. हालांकि, compose के सामान्य इस्तेमाल पर इसका कोई असर नहीं पड़ेगा: 1. Composer::startExpr को हटा दिया गया है 2. Composer::endExpr को हटा दिया गया है 3. Composer::call को बंद कर दिया गया है 4.
key
के ऐसे ओवरलोड हटा दिए गए हैं जिनमें वैरग्स नहीं हैं. आगे सेvararg
वर्शन का इस्तेमाल करें. 5. पिवटल एनोटेशन की सुविधा बंद कर दी गई है. इसके बजाय,key
का इस्तेमाल करें. 6. ScopeUpdateScope::updateScope को Function1 के बजाय Function3 के हिसाब से बदला गया था 7. Compile time के अतिरिक्त पैरामीटर शामिल करने के लिए, restartableFunction और restartableFunctionN को अपडेट किया गया था (I60756, b/143464846)MutableVector (Icccf7) में sortWith और removeRange जोड़ा गया
CompositionLifecycleObserver (I24289) के लिए, डिफ़ॉल्ट तरीके को लागू किया गया
अब कॉम्पोज़िशन को हटाने के लिए, लागू करने वाले को clear() तरीके की ज़रूरत है (Ibe697)
MutableVector में asMutableList() जोड़ा गया, ताकि पूरी सूची को कॉपी किए बिना, इसे सार्वजनिक एपीआई को पास किया जा सके. (I298df)
इवेंट के जवाब में जॉब लॉन्च करने के लिए, कॉम्पोज़िशन में मैनेज किया गया CoroutineScope पाने के लिए, rememberCoroutineScope() जोड़ा गया. (I0e264)
MutableVector एक नया कलेक्शन है, जो किसी भी स्टैंडर्ड कलेक्शन इंटरफ़ेस को लागू नहीं करता. इस कलेक्शन में, अन्य ज़रूरी शर्तों के मुकाबले तेज़ी से डेटा इकट्ठा किया जा सकता है. इसका इस्तेमाल, सिर्फ़ अंदरूनी प्रोसेस में किया जाना चाहिए. (I8ebd6)
Kotlin compose के ज़रूरी वर्शन में किसी समस्या से बचने के लिए,
StableMutableList
औरStableMutableMap
को कुछ समय के लिए हटा दिया गया है. जब Compose को Kotlin के ऐसे वर्शन पर अपडेट कर दिया जाएगा जिसमें यह समस्या नहीं होगी, तब इन इंटरफ़ेस को फिर से उपलब्ध कराया जाएगा.SnapshotStateList
औरSnapshotStateMap
अब सार्वजनिक हैं. हालांकि,StableMutableList
औरStableMutableMap
के वापस आने के बाद, इनका इस्तेमाल बंद कर दिया जाएगा. (Ia7769)ऐनिमेशन की टाइमिंग के लिए, टॉप-लेवल withFrameNanos फ़ंक्शन जोड़ें (Ie34c5)
@Untracked एनोटेशन का इस्तेमाल बंद कर दिया गया है. @ComposableContract(tracked=false) (Id211e) से बदलें
RestartableFunction और उससे जुड़े एपीआई का नाम बदलकर ComposableLambda वगैरह कर दिया गया है. इन एपीआई को सिर्फ़ कंपाइलर ने टारगेट किया था. इसलिए, आम तौर पर सोर्स लेवल के साथ काम करने की सुविधा पर इसका कोई असर नहीं पड़ेगा. नाम बदलने का मकसद, यह बताना था कि स्टैक ट्रेस (I7eb25) में दिखने पर, यह क्लास बेहतर क्यों है
@Composable एनोटेशन अब क्लास के लिए मान्य नहीं है (Ia5f02)
Ambient<T>
अब @Immutable के बजाय @Stable है (I0b4bb)इस बदलाव से पहले, अगर @Composable फ़ंक्शन में कोई (I5205a, b/158123804) मौजूद होता था, तो Compose कंपाइलर प्लग इन, कॉन्स्ट्रक्टर के कॉल को आसानी से इंटरसेप्ट कर लेता था
Recompose composable अब काम का नहीं है. ज़्यादातर मामलों में, MutableState असाइनमेंट की वजह से फिर से कॉम्पोज़ होना चाहिए. इसके अलावा, हमारा सुझाव है कि मौजूदा स्कोप को फिर से कॉम्पोज़ करने के लिए,
invalidate
फ़ंक्शन का इस्तेमाल करें. (Ifc992)Observe अब काम का एब्स्ट्रैक्शन नहीं है. अगर आपको इसे दोहराना है, तो इसके लागू होने की प्रक्रिया को दोहराया जा सकता है. इसके लिए, सिर्फ़ एक ऐसा फ़ंक्शन बनाएं जो कॉम्पोज़ेबल lambda पैरामीटर को लागू करता हो. उदाहरण के लिए,
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct को बंद कर दिया गया है. इसके बजाय, @ComposableContract(restartable=false) का इस्तेमाल करें (If4708)
हाल ही में लॉन्च किए गए StateFlow के लिए एक अडैप्टर जोड़ा गया है. इससे शुरुआती वैल्यू को पहले से भरने की सुविधा मिलती है, ताकि लौटाई गई स्थिति में कोई वैल्यू न हो (I61dd8, b/156233789)
Flow के लिए अडैप्टर जोड़ा गया. इस्तेमाल का उदाहरण: flow.collectAsState() के हिसाब से वैल्यू (If2198, b/153375923)
[बदली जा सकने वाली]Kotlin 1.4 प्रॉपर्टी के प्रतिनिधि के ऑप्टिमाइज़ेशन के साथ काम करने के लिए, स्टेट प्रॉपर्टी के प्रतिनिधि ऑपरेटर को एक्सटेंशन में ले जाया गया.
by state { ... }
याby mutableStateOf(...)
का इस्तेमाल जारी रखने के लिए, कॉल करने वाले लोगों को इंपोर्ट जोड़ने होंगे. (I5312c)androidx.compose.ViewComposer को androidx.ui.node.UiComposer पर ले जाया गया है androidx.compose.Emittable को हटा दिया गया है. यह ComponentNode के साथ काम नहीं करता था. इसलिए, androidx.compose.ViewAdapters को हटा दिया गया है. अब इनका इस्तेमाल नहीं किया जा सकता. Compose.composeInto का इस्तेमाल नहीं किया जा सकता. इसके बजाय,
setContent
याsetViewContent
का इस्तेमाल करें. Compose.disposeComposition को बंद कर दिया गया है. इसके बजाय,setContent
से लौटने वालेComposition
परdispose
तरीके का इस्तेमाल करें. androidx.compose.Compose.subcomposeInto को androidx.ui.core.subcomposeInto में ले जाया गया है ComponentNode#emitInsertAt का नाम बदलकर ComponentNode#insertAt कर दिया गया है ComponentNode#emitRemoveAt का नाम बदलकर ComponentNode#removeAt कर दिया गया है ComponentNode#emitMode का नाम बदलकर ComponentNode#move कर दिया गया है (Idef00)ComposeFlags.COMPOSER_PARAM
फ़्लैग कोtrue
पर अपडेट किया गया है. इससे, कॉम्पोज़ प्लग इन के लिए कोड जनरेशन की रणनीति बदल जाएगी. हाई लेवल पर, इससे @Composable फ़ंक्शन एक अतिरिक्त सिंथेटिक पैरामीटर के साथ जनरेट होते हैं. इसे बाद में @Composable कॉल में पास किया जाता है, ताकि रनटाइम, फ़ंक्शन के लागू होने को सही तरीके से मैनेज कर सके. यह बाइनरी में एक अहम बदलाव है. हालांकि, यह बदलाव, कंपोज़ के सभी मंज़ूर किए गए इस्तेमाल में सोर्स-लेवल के साथ काम करना जारी रखेगा. (I7971c)ambients API में होने वाले बदलावों के बारे में जानकारी. ज़्यादा जानकारी के लिए लॉग और
Ambient<T>
दस्तावेज़ देखें (I4c7ee, b/143769776)ui-livedata जोड़ा गया - LiveData के लिए अडैप्टर वाला नया आर्टफ़ैक्ट. इस्तेमाल का उदाहरण: liveData.observeAsState() के हिसाब से वैल्यू (Ie9e8c, b/150465596)
शुरुआती वैल्यू के बिना Rx अडैप्टर का इस्तेमाल नहीं किया जा सकता. null का इस्तेमाल करना हमेशा सबसे अच्छा डिफ़ॉल्ट विकल्प नहीं होता. उदाहरण के लिए, अगर आपके पास कोई सूची है, तो emptyList() या किसी अन्य सही डिफ़ॉल्ट वैल्यू (I00025, b/161348384) से शुरू करना बेहतर होता है
ui-rxjava2 जोड़ा गया - RxJava2 के लिए अडैप्टर वाला नया आर्टफ़ैक्ट. इस्तेमाल का उदाहरण: observable.subscribeAsState() के हिसाब से वैल्यू (Ifab4b, b/153369097)
savedInstanceState()
का इस्तेमाल अब वैल्यू न होने पर भी काम करने वाले टाइप (I6847f, b/153532190) के साथ किया जा सकता हैकस्टम सेवर ऑब्जेक्ट लिखने को आसान बनाने के लिए, नए listSaver() और mapSaver() फ़ंक्शन (I8cf68, b/152331508)
नए फ़ंक्शन: savedInstanceState() और rememberSavedInstanceState(). ये state() और remember() जैसे ही हैं, लेकिन इनमें सेव किए गए इंस्टेंस स्टेटस की सुविधा पहले से मौजूद है (If1987, b/152025209)
गड़बड़ियां ठीक की गईं
runOnIdleCompose
का नाम बदलकरrunOnIdle
कर दिया गया (I83607)- LayoutNode को एक्सपेरिमेंटल एपीआई बनाया (I4f2e9)
- androidx.ui.foundation.TextFieldValue और androidx.ui.input.EditorValue अब काम नहीं करते. इस टाइप का इस्तेमाल करने वाले TextField, FilledTextField, और CoreTextField कॉम्पोनेंट भी अब काम नहीं करेंगे. इसके बजाय, कृपया androidx.ui.input.TextFieldValue का इस्तेमाल करें (I4066d, b/155211005)
- मॉडिफ़ायर पर drawBackground एक्सटेंशन एपीआई के पक्ष में, अब इस्तेमाल नहीं किए जा रहे DrawBackground एपीआई को हटा दिया गया है. कोड पाथ को कम करने के लिए, रंग, ब्रश, और पेंट drawBackground के लागू होने के तरीके को फिर से तैयार किया गया. साथ ही, कंपोजिशन के हिस्से के तौर पर मॉडिफ़ायर बनाने की ज़रूरत को भी हटा दिया गया. (I0343a)
- अपडेट किए गए बेहतर लेवल के Compose API, जो CanvasScope को एक्सपोज़ करने के लिए Canvas को एक्सपोज़ करते हैं. इससे उपभोक्ताओं को अपने Paint ऑब्जेक्ट मैनेज करने की ज़रूरत नहीं पड़ती. जिन उपयोगकर्ताओं को अब भी कैनवस का ऐक्सेस चाहिए वे drawCanvas एक्सटेंशन के तरीके का इस्तेमाल कर सकते हैं. यह तरीका, कैनवस पर ड्रॉ करने के निर्देश देने के लिए कॉलबैक उपलब्ध कराता है. (I80afd)
- WithConstraints ट्रेलिंग लेम्ब्डा एपीआई को बदल दिया गया है. अब दो पैरामीटर के बजाय, इसमें एक रिसीवर स्कोप है. यह स्कोप, constraints और layoutDirection के अलावा, Dp (I91b9a, b/149979702) में minWidth, maxWidth, minHeight, और maxHeight प्रॉपर्टी देता है
- सिमेट्रिक पैडिंग मॉडिफ़ायर जोड़ा गया. (I39840)
- wrapContentWidth और wrapContentHeight को अपडेट किया गया है, ताकि किसी भी अलाइनमेंट के बजाय वर्टिकल या हॉरिज़ॉन्टल अलाइनमेंट की उम्मीद की जा सके. वर्टिकल या हॉरिज़ॉन्टल अलाइनमेंट को स्वीकार करने के लिए, गुरुत्वाकर्षण मॉडिफ़ायर को अपडेट किया गया था. कस्टम ऐलाइनमेंट के साथ काम करने के लिए, लाइन, कॉलम, और स्टैक को अपडेट किया गया. (Ib0728)
- ui-text मॉड्यूल का नाम बदलकर ui-text-core (I57dec) कर दिया गया है
- DrawModifier API को बेहतर बनाना:
- draw() ContentDrawScope के लिए रिसीवर स्कोप बनाया गया
- draw() से सभी पैरामीटर हटाए गए
- DrawScope का इंटरफ़ेस, CanvasScope जैसा ही है
- ContentDrawScope में drawContent() मेथड है (Ibaced, b/152919067)
- ColoredRect फ़ंक्शन का इस्तेमाल बंद कर दिया गया है. इसके बजाय,
Box(Modifier.preferredSize(width, height).drawBackground(color))
का इस्तेमाल करें. (I499fa, b/152753731) - फ़ैक्ट्री एक्सटेंशन फ़ंक्शन (I225e4) के साथ मॉडिफ़ायर प्लस ऑपरेटर को बदला गया
- RowScope और ColumnScope के सदस्यों को अब लाइन और कॉलम के बाहर ऐक्सेस किया जा सकता है. (I3a641)
- LayoutFlexible का नाम बदलकर LayoutWeight कर दिया गया. भरने के लिए, टाइट पैरामीटर का नाम बदला गया. (If4738)
- WithConstraints को LayoutDirection पैरामीटर (I6d6f7) मिला
- बैकग्राउंड का नाम बदलकर DrawBackground किया गया और इसे डिफ़ॉल्ट रूप से याद रखने की सुविधा दी गई (Ia0bd3)
- ButtonStyle को अलग-अलग फ़ंक्शन से बदल दिया गया है. साथ ही, टेक्स्ट (स्ट्रिंग) ओवरलोड हटा दिया गया है. इस्तेमाल की जानकारी के लिए, अपडेट किए गए सैंपल देखें. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
औरrunOnUiThread
अब ComposeTestRule पर मौजूद तरीकों के बजाय, ग्लोबल फ़ंक्शन हैं. (Icbe8f)
बाहरी योगदान
- Compose Runtime पोर्टिंग लेयर से, Looper और Handler जैसे ग़ैर-ज़रूरी एपीआई हटाना (I6847d)
- बिना शुरुआती वैल्यू वाले
Flow<T>.collectAsState()
को बंद करें. इसके बजाय,StateFlow<T>
का इस्तेमाल करें या साफ़ तौर पर शुरुआती वैल्यू दें. (I63f98, b/157674865)