Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(सभी कंपोज़ पैकेज के लिए, एपीआई रेफ़रंस दस्तावेज़ देखें)
नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा वर्शन |
---|---|---|---|---|
16 जुलाई, 2025 | 1.8.3 | - | 1.9.0-beta03 | - |
संरचना
Compose, androidx
में मौजूद सात Maven Group Id का कॉम्बिनेशन है. हर ग्रुप में, फ़ंक्शन का टारगेट किया गया सबसेट होता है. हर ग्रुप के रिलीज़ नोट का अपना सेट होता है.
इस टेबल में, ग्रुप और रिलीज़ नोट के हर सेट के लिंक के बारे में बताया गया है.
ग्रुप | ब्यौरा |
---|---|
compose.animation | उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, Jetpack Compose ऐप्लिकेशन में ऐनिमेशन बनाएं. |
compose.compiler | @Composable फ़ंक्शन को बदलें और Kotlin कंपाइलर प्लगिन की मदद से ऑप्टिमाइज़ेशन चालू करें. |
compose.foundation | इस्तेमाल के लिए तैयार बिल्डिंग ब्लॉक की मदद से, Jetpack Compose ऐप्लिकेशन लिखें. साथ ही, अपने डिज़ाइन सिस्टम के कॉम्पोनेंट बनाने के लिए, फ़ाउंडेशन को बढ़ाएं. |
compose.material | इस्तेमाल के लिए तैयार मटीरियल डिज़ाइन कॉम्पोनेंट की मदद से, Jetpack Compose यूज़र इंटरफ़ेस (यूआई) बनाएं. यह Compose का टॉप लेवल एंट्री पॉइंट है. इसे ऐसे कॉम्पोनेंट उपलब्ध कराने के लिए डिज़ाइन किया गया है जो www.material.io पर बताए गए कॉम्पोनेंट से मेल खाते हों. |
compose.material3 | मटीरियल डिज़ाइन 3 कॉम्पोनेंट की मदद से, Jetpack Compose यूज़र इंटरफ़ेस (यूआई) बनाएं. ये कॉम्पोनेंट, मटीरियल डिज़ाइन का अगला वर्शन हैं. Material 3 में, अपडेट की गई थीमिंग और कॉम्पोनेंट शामिल हैं. साथ ही, इसमें Material You की मनमुताबिक बनाने की सुविधाएं भी हैं, जैसे कि डाइनैमिक कलर. इसे Android 12 की नई विज़ुअल स्टाइल और सिस्टम यूज़र इंटरफ़ेस (यूआई) के साथ काम करने के लिए डिज़ाइन किया गया है. |
compose.runtime | Compose के प्रोग्रामिंग मॉडल और स्टेट मैनेजमेंट के बुनियादी बिल्डिंग ब्लॉक. साथ ही, Compose Compiler Plugin के लिए कोर रनटाइम, ताकि उसे टारगेट किया जा सके. |
compose.ui | डिवाइस के साथ इंटरैक्ट करने के लिए, Compose यूज़र इंटरफ़ेस (यूआई) के बुनियादी कॉम्पोनेंट. इनमें लेआउट, ड्रॉइंग, और इनपुट शामिल हैं. |
डिपेंडेंसी का एलान करना
Compose पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle
फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
ग्रूवी
dependencies { implementation "androidx.compose.runtime:runtime:1.8.3" implementation "androidx.compose.runtime:runtime-livedata:1.8.3" implementation "androidx.compose.runtime:runtime-rxjava2:1.8.3" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.8.3") implementation("androidx.compose.runtime:runtime-livedata:1.8.3") implementation("androidx.compose.runtime:runtime-rxjava2:1.8.3") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. कृपया नई लाइब्रेरी बनाने से पहले, इस लाइब्रेरी में मौजूद मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.
ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.
Runtime Tracing का वर्शन 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 में ये कमिट शामिल हैं.
नई सुविधाएं
- यह सुविधा, Benchmark और Tracing Perfetto के नए वर्शन के साथ काम करती है.इससे ऐप्लिकेशन के स्टार्टअप (कोल्ड स्टार्ट) के दौरान कंपोज़िशन ट्रेसिंग की सुविधा मिलती है. उदाहरण के लिए, AndroidX Benchmark और 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.9
वर्शन 1.9.0-beta03
16 जुलाई, 2025
androidx.compose.runtime:runtime-*:1.9.0-beta03
रिलीज़ हो गया है. वर्शन 1.9.0-beta03 में ये कमिट शामिल हैं.
वर्शन 1.9.0-beta02
2 जुलाई, 2025
androidx.compose.runtime:runtime-*:1.9.0-beta02
रिलीज़ हो गया है. वर्शन 1.9.0-beta02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- कंपोज़िशन के बीच, स्लॉट टेबल में मौजूद वैल्यू के रेफ़रंस लाइफ़टाइम को कम किया गया. ऐसे मामले सामने आए हैं जिनमें स्लॉट टेबल में मौजूद रेफ़रंस, ज़रूरत से ज़्यादा समय तक फ़्रेम में दिखता है. (I49e74, b/418516940)
- हॉट रिलोड करने के तरीकों के लिए, Kotlin मैंगलिंग को हटाएं. (Ic56a3, b/426871325)
वर्शन 1.9.0-beta01
18 जून, 2025
androidx.compose.runtime:runtime-*:1.9.0-beta01
रिलीज़ हो गया है. वर्शन 1.9.0-beta01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- Compose कंपाइलर से जोड़ी गई सोर्स जानकारी को पार्स करने के लिए, टूलिंग एपीआई जोड़ा गया. (Iceaf9, b/408492167)
SnapshotStateSet
अब Android परParcelable
लागू करता है. अब इसेrememberSaveable { ... }
के तौर पर इस्तेमाल किया जा सकता है. (I755dd, b/378623803)SnapshotStateList
अब Android परParcelable
लागू करता है. अब इसेrememberSaveable { ... }
के तौर पर इस्तेमाल किया जा सकता है. (Id18be, b/378623803)movableContentOf()
को अब@RememberInComposition
एनोटेशन के साथ मार्क किया गया है. इससे लिंट को गलत इस्तेमाल (I2738d) का पता लगाने में मदद मिलती है- एक्सपेरिमेंट के तौर पर उपलब्ध कंपोज़िशन ऑब्ज़र्वर एपीआई को अपडेट किया गया है. इससे, रीकंपोज़िशन की वजहों को ज़्यादा बेहतर तरीके से समझा जा सकेगा (I32b6a)
- इस सुविधा के आने वाले समय में होने वाले डेवलपमेंट को ध्यान में रखते हुए,
setDiagnosticStackTraceEnabled
को एक्सपेरिमेंटल में बदलें. (I11db3) currentCompositeKeyHash
का अब इस्तेमाल नहीं किया जा सकता. इसके बजाय,currentCompositeKeyHashCode
का इस्तेमाल करें. बदलाव करने वाला एपीआई, एक ही हैश को ज़्यादा बिट के साथ एन्कोड करता है. इससे कंपोज़िशन हैरारकी में मौजूद दो रैंडम ग्रुप के लिए, एक जैसी हैश कुंजी होने की संभावना बहुत कम हो जाती है. (I4cb6a, b/177562901)- Kotlin 2.0 के साथ रिलीज़ किए गए प्रोजेक्ट के लिए, KGP 2.0.0 या इसके बाद का वर्शन इस्तेमाल करना ज़रूरी है (Idb6b5)
@Stable
,@Immutable
, और@StableMarker
को रनटाइम-एनोटेशन में ले जाया गया है (संगत तरीके से). अगर आपको कंपोज़ पर निर्भर न रहने वाली लाइब्रेरी से इन एनोटेशन का इस्तेमाल करना है, तो अब रनटाइम-एनोटेशन का इस्तेमाल किया जा सकता है. (I23a16)rememberSaveable
ओवरलोड का नाम बदलकरrememberSerializable
कर दिया गया है. यहKSerializer
को स्वीकार करता है. इस बदलाव से,kotlinx.serialization
के साथ इसके इस्तेमाल के बारे में साफ़ तौर पर पता चलता है.rememberSaveable
में सीधे तौर पर सामान्यkotlinx.Serializable
क्लास का इस्तेमाल करने के लिए,reified
टाइप पैरामीटर की ज़रूरत होगी. इससे सोर्स कंपैटिबिलिटी टूट जाएगी, क्योंकि सभी कॉल साइट को कंपाइल टाइम पर रीफ़ाइड टाइप की जानकारी देनी होगी. (Idb875, I38627, b/376028110)
गड़बड़ियां ठीक की गईं
- जिन कंपोज़िशन के लिए, रोके जा सकने वाले कॉन्टेंट को रद्द कर दिया गया है उन्हें हटाना होगा. अब इसकी जांच कंपोज़िशन करती है. अगर इसका फिर से इस्तेमाल किया जाता है, तो यह गड़बड़ी दिखाएगा. (I2daa5, b/406792785)
- रोकने लायक कंपोज़िशन से जुड़ी समस्या को ठीक किया गया है. अब कंपोज़िशन को बंद करने पर, दर्शकों को याद दिलाने के लिए नकली
onForgotten
नहीं भेजा जाएगा.RememberObservers
को, रोकी जा सकने वाली रद्द की गई कंपोज़िशन में सिर्फ़ onAbandoned भेजा जाना चाहिए. (I26f54) - कॉन्टेंट को एक जगह से दूसरी जगह ले जाने से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, कॉन्टेंट को एक जगह से दूसरी जगह ले जाने की प्रोसेस के आखिरी चरणों में, अमान्यताओं को कंपोज़र में जोड़ा जाता है. हालांकि, कॉन्टेंट को एक जगह से दूसरी जगह ले जाने पर, इन अमान्यताओं को अपडेट नहीं किया जाता है. इस वजह से, कॉन्टेंट को गलत जगह पर फिर से कंपोज़ किया जाता है. (Icd2fa, b/409439507)
- कॉन्टेंट को एक जगह से दूसरी जगह ले जाने से पहले, उसे कंपोज़ करने के बाद अमान्य कर दिए जाने की समस्या को ठीक किया गया है. (I99eac, b/229001114)
previous()
को कॉल करने के बाद,SnapshotStateList
से बनाए गए सूची के इटरेटर केremove()
को कॉल करने पर, सूची से गलत एलिमेंट हटाया जा सकता है. साथ ही, यहArrayList
के कॉल के एक ही क्रम के लिए,ArrayList
के काम से मेल नहीं खाता. (I05ab7, b/417493222)onForgotton
भेजने से जुड़ी समस्या को ठीक किया गया है. उदाहरण के लिए, इसकी वजह से डिस्पोज़ेबल इफ़ेक्ट गलत क्रम में लागू हो सकते थे.onDispose
(Ic1c91, b/417450712)- pausable कंपोज़िशन में स्टेट हैंडलिंग का फिर से इस्तेमाल करने से जुड़ी समस्या को ठीक किया गया (Ife96e, b/404058957)
- जब किसी कंपोज़िशन को रोका गया और फिर से शुरू किया गया, तब कंपोज़िशन को फिर से इस्तेमाल करने की स्थिति को ठीक किया गया. ऐसा इसलिए किया गया, क्योंकि कंपोज़िशन के रुकने के दौरान, कंपोज़िशन के कुछ हिस्सों में बदलाव हुआ था. (I441d1, b/416209738)
- हमने b/404058957 समस्या को ठीक करने के लिए, रोके जा सकने वाले कंपोज़िशन के लिए, डिसपैच से जुड़ी समस्या को ठीक करने की सुविधा को लागू कर दिया है. इससे पहले, इस समस्या को पूरी तरह से ठीक नहीं किया गया था. (I1afd4, b/404058957)
OffsetApplier
अबapply()
को सही तरीके से बदलता है.apply()
को पॉज़ की जा सकने वाली कंपोज़िशन के साथ पेश किया गया था. ऐसा न होने पर, वर्चुअल नोड अपडेट करते समय, रोके जा सकने वाले कंपोज़िशन में अपवाद हो सकता है. (Idbf31, b/409291131)- हमने एक ऐसी समस्या को ठीक किया है जिसकी वजह से, Molecule का इस्तेमाल करने वाले लोगों को परेशानी हो सकती थी. यह समस्या तब होती थी, जब फ़्रेम भेजे जाने के दौरान
FrameClock.withFrameNanos
पर निलंबित कॉल को रद्द कर दिया जाता था. (I89cab, b/407027032) - Recomposer, मूव किए जा सकने वाले कॉन्टेंट (Ie5416, b/409267170) के साथ काम नहीं कर सकता
- कंपोज़िशन को रोकने की सुविधा के दौरान,
onReuse
औरonDeactivate
का क्रम बदल सकता है. अब ये इवेंट,onDeactivate
/onReuse
के क्रम में ही ट्रिगर होंगे. (I996e4, b/404058957) - pausable कंपोज़िशन में remember ऑब्ज़र्वर को डिसपैच करने की समस्या ठीक की गई है, ताकि एक ही apply में याद रखे गए/भूल गए ऑब्ज़र्वर को डिसपैच करने से बचा जा सके (I570b2, b/404645679, b/407931790)
- Compose Multiplatform में
LifecycleRegistry
को असुरक्षित मोड पर स्विच किया गया है, ताकिMainThread
की जांच बंद की जा सके और थ्रेडिंग से जुड़ी समस्याओं को ठीक किया जा सके. ज़्यादा जानकारी के लिए, CMP-8227 देखें. (Icee87)
बाहरी योगदान
- Molecule का इस्तेमाल करने वाले लोगों के लिए, एक गड़बड़ी ठीक की गई है. इसमें
RecompositionMode.Immediate
का इस्तेमाल करने पर, रीकंपोज़िशन छूट सकती हैं. (I9f3a9, b/419527812) PausableComposition
isApplied
औरisCancelled
गेटर को दिखाया गया है. इनकी मदद से,PausableComposition
की स्थिति की जांच की जा सकती है. (I994aa)FunctionKeyMeta
एनोटेशन मेंAnnotationTarget.FUNCTION
जोड़ा गया. (I08021)
वर्शन 1.9.0-alpha04
4 जून, 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha04
रिलीज़ हो गया है. वर्शन 1.9.0-alpha04 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
SnapshotStateSet
अब Android पर Parcelable को लागू करता है. इसलिए, अब इसेrememberSaveable { ... }
के हिस्से के तौर पर इस्तेमाल किया जा सकता है. (I755dd, b/378623803)SnapshotStateList
अब Android पर Parcelable को लागू करता है. इसलिए, अब इसेrememberSaveable { ... }
के हिस्से के तौर पर इस्तेमाल किया जा सकता है. (Id18be, b/378623803)movableContentOf()
को अब@RememberInComposition
एनोटेशन के साथ मार्क किया गया है. इससे लिंट को गलत इस्तेमाल (I2738d) का पता लगाने में मदद मिलती है- एक्सपेरिमेंट के तौर पर उपलब्ध कंपोज़िशन ऑब्ज़र्वर एपीआई को अपडेट किया गया है. इससे, रीकंपोज़िशन की वजहों को ज़्यादा बेहतर तरीके से समझा जा सकेगा (I32b6a)
गड़बड़ियां ठीक की गईं
onForgotton
भेजने से जुड़ी समस्या को ठीक किया गया है. उदाहरण के लिए, इसकी वजह से डिस्पोज़ेबल इफ़ेक्ट गलत क्रम में लागू हो सकते थे.onDispose
(Ic1c91, b/417450712)- pausable कंपोज़िशन में स्टेट हैंडलिंग का फिर से इस्तेमाल करने से जुड़ी समस्या को ठीक किया गया (Ife96e, b/404058957)
- बदले जा सकने वाले कलेक्शन का पता लगाने की सुविधा को K1 और K2, दोनों के साथ काम करने के लिए, छोटे बग को ठीक किया गया है (Ie4878)
- छोटी-मोटी गड़बड़ियां ठीक की गई हैं. साथ ही, ओवरराइड की गई प्रॉपर्टी ऐक्सेस करने वालों के लिए एनोटेशन लुकअप को K1 और K2 (I9900d), दोनों के साथ काम करने लायक बनाया गया है
बाहरी योगदान
- Molecule का इस्तेमाल करने वाले लोगों के लिए, एक गड़बड़ी ठीक की गई है. इसमें
RecompositionMode.Immediate
का इस्तेमाल करने पर, रीकंपोज़िशन छूट सकती हैं. (I9f3a9, b/419527812) - इसमें
PausableComposition
isApplied औरisCancelled
getters को दिखाया गया है. इनकी मदद से,PausableComposition
की स्थिति की जांच की जा सकती है. (I994aa)
वर्शन 1.9.0-alpha03
20 मई, 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha03
रिलीज़ हो गया है. वर्शन 1.9.0-alpha03 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- इस सुविधा के आने वाले समय में होने वाले डेवलपमेंट को ध्यान में रखते हुए,
setDiagnosticStackTraceEnabled
को एक्सपेरिमेंटल में बदलें. (I11db3)
गड़बड़ियां ठीक की गईं
- जब किसी कंपोज़िशन को रोका गया और फिर से शुरू किया गया, तब कंपोज़िशन को फिर से इस्तेमाल करने की स्थिति को ठीक किया गया. ऐसा इसलिए किया गया, क्योंकि कंपोज़िशन के रुकने के दौरान, कंपोज़िशन के कुछ हिस्सों में बदलाव हुआ था. (I441d1, b/416209738)
- b/404058957 समस्या के लिए, रोके जा सकने वाले कंपोज़िशन के लिए, डिसपैच फ़िक्स को पूरा किया गया. पिछला फ़िक्स अधूरा था. (I1afd4, b/404058957)
SaveableStateHolder.SaveableStateProvider
अब कंपोज़िशन के ज़रिए अपने कॉन्टेंट कोLocalSavedStateRegistryOwner
देता है. (Ia2761, b/413108878)androidx.compose.runtime.saveable
अबandroidx.lifecycle.runtime.compose
पर निर्भर करता है. (I53228, b/413108878)
वर्शन 1.9.0-alpha02
7 मई, 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha02
रिलीज़ हो गया है. वर्शन 1.9.0-alpha02 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- कस्टम 'key' के साथ
rememberSaveable
को बंद कर दिया गया है. इससे पोज़िशनल स्कोपिंग को बायपास किया जाता है.इससे स्टेट बग और गलत व्यवहार होता है. उदाहरण के लिए, अनजाने में स्टेट शेयर करना या खोना, नेस्ट किए गएLazyLayouts
में समस्याएं. कृपया 'key' पैरामीटर हटाएं, ताकि लगातार और स्थानीय तौर पर स्कोप की गई स्थिति के लिए पोज़िशनल स्कोपिंग का इस्तेमाल किया जा सके. ज़्यादा जानकारी के लिए, पूरा कमिट मैसेज देखें. (I5e6ff, b/357685851)
गड़बड़ियां ठीक की गईं
OffsetApplier
अबapply()
को सही तरीके से बदलता है.apply()
को पॉज़ की जा सकने वाली कंपोज़िशन के साथ पेश किया गया था. ऐसा न होने पर, वर्चुअल नोड अपडेट करते समय, रोके जा सकने वाले कंपोज़िशन में अपवाद हो सकता है. (Idbf31, b/409291131)- हमने एक ऐसी समस्या को ठीक किया है जिसकी वजह से, Molecule का इस्तेमाल करने वाले लोगों को परेशानी हो सकती थी. यह समस्या तब होती थी, जब फ़्रेम भेजे जाने के दौरान
FrameClock.withFrameNanos
पर निलंबित कॉल को रद्द कर दिया जाता था. (I89cab, b/407027032) - ऐसा हो सकता है कि मूव किए जा सकने वाले कॉन्टेंट को खारिज करने की स्थिति अब भी लंबित हो और Recomposer निष्क्रिय हो जाए. आम तौर पर, ऐसा नहीं होता है, क्योंकि Recomposer के मुख्य लूप में, मूव किए जा सकने वाले कॉन्टेंट की स्थिति को खारिज कर दिया जाता है. हालांकि, ऐसा रोके जा सकने वाले कंपोज़िशन में तब हो सकता है, जब
resume()
(Ie5416, b/409267170) के दौरान, मूव किए जा सकने वाले कॉन्टेंट को खारिज कर दिया जाता है - कंपोज़िशन को रोकने की सुविधा के दौरान,
onReuse
औरonDeactivate
का क्रम बदल सकता है. अब यह गारंटी दी जाती है कि येonDeactivate/onReuse
के क्रम में ही दिखेंगे. (I996e4, b/404058957)
वर्शन 1.9.0-alpha01
23 अप्रैल, 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha01
रिलीज़ हो गया है. वर्शन 1.9.0-alpha01 में ये कमिट शामिल हैं.
व्यवहार में बदलाव
- Compose के साथ शिप किए गए Lint चेक के लिए, अब AGP का कम से कम 8.8.2 वर्शन ज़रूरी है. अगर AGP को अपग्रेड नहीं किया जा सकता, तो
gradle.properties
मेंandroid.experimental.lint.version=8.8.2
(या नया वर्शन) का इस्तेमाल करके, Lint को अपग्रेड किया जा सकता है. आईडीई में कंपोज़ के लिंट चेक चलाने के लिए, Android Studio Ladybug या इसके बाद का वर्शन ज़रूरी है.
एपीआई में हुए बदलाव
currentCompositeKeyHash
का अब इस्तेमाल नहीं किया जा सकता. इसके बजाय,currentCompositeKeyHashCode
का इस्तेमाल करें. बदलाव करने वाला एपीआई, एक ही हैश को ज़्यादा बिट के साथ एन्कोड करता है. इससे कंपोज़िशन हैरारकी में मौजूद दो रैंडम ग्रुप के लिए, एक जैसी हैश कुंजी होने की संभावना बहुत कम हो जाती है. (I4cb6a, b/177562901)- Kotlin 2.0 के साथ रिलीज़ किए गए प्रोजेक्ट के लिए, KGP 2.0.0 या इसके बाद का वर्शन इस्तेमाल करना ज़रूरी है (Idb6b5)
@Stable
,@Immutable
, और@StableMarker
को रनटाइम-एनोटेशन में ले जाया गया है (संगत तरीके से). अगर आपको कंपोज़ पर निर्भर न रहने वाली लाइब्रेरी से इन एनोटेशन का इस्तेमाल करना है, तो अब रनटाइम-एनोटेशन का इस्तेमाल किया जा सकता है. (I23a16)onCreating
औरonDisposing
को हटाता है, क्योंकि इन्हें बंद कर दिया गया है और इनका नाम बदलकरonPreCreate
औरonPreDispose
कर दिया गया है. इससे नाम बदलने की प्रोसेस पूरी हो जाती है. (I97461)- एक कंपोज़िशन लोकल को दिखाता है, जो कंपोज़िशन में कंपोज़ नोड की जगह के आधार पर कंपोज़ स्टैक ट्रेस अटैच करने की अनुमति देता है. (Ie0bda, b/354163858)
- कंपोज़िशन में सेव की गई सोर्स की जानकारी के आधार पर, गड़बड़ी की जानकारी देने वाले कंपोज़ स्टैक ट्रेस की सुविधा जोड़ी गई है. (I3db9f, b/354163858)
runWithTimingDisabled
को बंद करें औरrunWithMeasurementDisabled
का इस्तेमाल करें. इससे यह पता चलता है कि सभी मेट्रिक को रोक दिया गया है. इसके अलावा,MicrobenchmarkScope
सुपरक्लास को दिखाएं, क्योंकिrunWithMeasurementDisabled
फ़ंक्शन को फिर से एलान करके ऐक्सेस नहीं किया जा सकता. ऐसा इसलिए, क्योंकि यह इनलाइन है. (I9e23b, b/389149423, b/149979716)@FrequentlyChangingValue
जोड़ा गया: यह एक एनोटेशन है. इसका इस्तेमाल फ़ंक्शन और प्रॉपर्टी गेटर को मार्क करने के लिए किया जा सकता है. इससे यह पता चलता है कि उन्हें कंपोज़िशन के अंदर सीधे तौर पर कॉल नहीं किया जाना चाहिए, क्योंकि इससे बार-बार रीकंपोज़िशन हो सकता है. उदाहरण के लिए, स्क्रोल की पोज़िशन की वैल्यू और ऐनिमेशन की वैल्यू को मार्क करने के लिए. चेतावनी, लिंट चेक से मिलती है. (I83630, b/234042500)@RememberInComposition
जोड़ता है: यह एक एनोटेशन है. इसका इस्तेमाल कंस्ट्रक्टर, फ़ंक्शन, और प्रॉपर्टी गेटर को मार्क करने के लिए किया जा सकता है. इससे यह पता चलता है कि कंपोज़िशन के अंदर, इन्हें सीधे तौर पर कॉल नहीं किया जाना चाहिए. गड़बड़ियों की जानकारी, उससे जुड़े लिंट चेक से मिलेगी. इस एनोटेशन का इस्तेमाल, ऐसे एलान को मार्क करने के लिए किया जा सकता है जो स्टेटफ़ुल / बदलने वाले ऑब्जेक्ट, ऐसे ऑब्जेक्ट जिनकी पहचान को कंपोज़िशन के दौरान बनाए रखना ज़रूरी है या ऐसे ऑब्जेक्ट जिन्हें इंस्टैंटिएट करना महंगा है और जिन्हें कंपोज़िशन के दौरान कैश मेमोरी में सेव किया जाना चाहिए. (Ie7db0)- KotlinX Serialization का इस्तेमाल करके, टाइप-सेफ़ स्टेट पर्सिस्टेंस के लिए
KSerializer
के साथ काम करने वाला नयाrememberSaveable
ओवरलोड जोड़ा गया.Saver
पर आधारित मौजूदा एपीआई काम करता रहेगा. (Iea4ab, b/376028110)
गड़बड़ियां ठीक की गईं
- pausable कंपोज़िशन में remember ऑब्ज़र्वर को डिसपैच करने की समस्या ठीक की गई है, ताकि एक ही apply में याद रखे गए/भूल गए ऑब्ज़र्वर को डिसपैच करने से बचा जा सके (I570b2, b/404645679, b/407931790)
- एपीआई के दिशा-निर्देशों के मुताबिक, onCreating के
SnapshotObserver
तरीकों का नाम बदलकरonPreCreate
औरonDisposing
का नाम बदलकरonPreDispose
कर दिया गया है. पिछले तरीके बंद कर दिए गए हैं. नए तरीके डिफ़ॉल्ट रूप से पुराने तरीकों को कॉल करते हैं, इसलिए इस इंटरफ़ेस के मौजूदा तरीके तब तक काम करते रहेंगे, जब तक तरीकों को हटाया नहीं जाता. इन तरीकों को 1.9.0 ऐल्फ़ा वर्शन में हटा दिया जाएगा. इसके लिए, एक सीएल बनाया गया है, जिसे जल्द ही रिलीज़ किया जाएगा. इन्हें 1.8 स्टेबल वर्शन से पहले, 1.8 बीटा वर्शन से हटा दिया जाएगा. (I6d753) - हमने उस समस्या को ठीक कर दिया है जिसमें मूव किए जा सकने वाले ग्रुप के बाद दिखने वाले छोटे किए गए ग्रुप को फिर से कंपोज़ करते समय, याद रखी गई वैल्यू को गलत तरीके से भुला दिया जाता था और फिर से कैलकुलेट किया जाता था (I62cab, b/383769314)
LaunchedEffect
औरrememberCoroutineScope
में, कंपोज़ स्टैक ट्रेस की सुविधा जोड़ी गई (I705c0, b/354163858)- Compose lint checks के लिए, अब कमांड लाइन से कम से कम AGP 8.8.2 वर्शन की ज़रूरत होती है. साथ ही, IDE के साथ काम करने के लिए कम से कम Android Studio Ladybug की ज़रूरत होती है. अगर AGP के पुराने वर्शन का इस्तेमाल किया जा रहा है, तो AGP पर असर डाले बिना Lint के वर्शन को अपग्रेड करने के लिए, gradle.properties में
android.experimental.lint.version=8.8.2
सेट किया जा सकता है. (I6f2a8)
बाहरी योगदान
FunctionKeyMeta
एनोटेशन मेंAnnotationTarget.FUNCTION
जोड़ा गया. (I08021)
वर्शन 1.8
वर्शन 1.8.3
18 जून, 2025
androidx.compose.runtime:runtime-*:1.8.3
रिलीज़ हो गया है. वर्शन 1.8.3 में ये कमिट शामिल हैं.
वर्शन 1.8.2
20 मई, 2025
androidx.compose.runtime:runtime-*:1.8.2
रिलीज़ हो गया है. वर्शन 1.8.2 में ये कमिट शामिल हैं.
वर्शन 1.8.1
7 मई, 2025
androidx.compose.runtime:runtime-*:1.8.1
रिलीज़ हो गया है. वर्शन 1.8.1 में ये कमिट शामिल हैं.
वर्शन 1.8.0
23 अप्रैल, 2025
androidx.compose.runtime:runtime-*:1.8.0
रिलीज़ हो गया है. वर्शन 1.8.0 में ये कमिट शामिल हैं.
वर्शन 1.8.0-rc03
9 अप्रैल, 2025
androidx.compose.runtime:runtime-*:1.8.0-rc03
रिलीज़ हो गया है. वर्शन 1.8.0-rc03 में ये कमिट शामिल हैं.
वर्शन 1.8.0-rc02
26 मार्च, 2025
androidx.compose.runtime:runtime-*:1.8.0-rc02
रिलीज़ हो गया है. वर्शन 1.8.0-rc02 में ये कमिट शामिल हैं.
वर्शन 1.8.0-rc01
12 मार्च, 2025
androidx.compose.runtime:runtime-*:1.8.0-rc01
रिलीज़ हो गया है. वर्शन 1.8.0-rc01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- एपीआई के दिशा-निर्देशों के मुताबिक, onCreating के
SnapshotObserver
तरीकों का नाम बदलकरonPreCreate
औरonDisposing
का नाम बदलकरonPreDispose
कर दिया गया है. पिछले तरीके बंद कर दिए गए हैं. नए तरीके डिफ़ॉल्ट रूप से पुराने तरीकों को कॉल करते हैं, इसलिए इस इंटरफ़ेस के मौजूदा तरीके तब तक काम करते रहेंगे, जब तक तरीकों को हटाया नहीं जाता. इन तरीकों को 1.9.0 ऐल्फ़ा वर्शन में हटा दिया जाएगा. इसके लिए, एक सीएल बनाया गया है, जिसे जल्द ही रिलीज़ किया जाएगा. इन्हें 1.8 स्टेबल वर्शन से पहले, 1.8 बीटा वर्शन से हटा दिया जाएगा. (I6d753)
वर्शन 1.8.0-beta03
26 फ़रवरी, 2025
androidx.compose.runtime:runtime-*:1.8.0-beta03
रिलीज़ हो गया है. वर्शन 1.8.0-beta03 में ये कमिट शामिल हैं.
वर्शन 1.8.0-beta02
12 फ़रवरी, 2025
androidx.compose.runtime:runtime-*:1.8.0-beta02
रिलीज़ हो गया है. वर्शन 1.8.0-beta02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- रोके जा सकने वाले कंपोज़िशन में, पकड़े गए अपवाद को फिर से थ्रो करें .(384486d)
वर्शन 1.8.0-beta01
29 जनवरी, 2025
androidx.compose.runtime:runtime-*:1.8.0-beta01
रिलीज़ हो गया है. वर्शन 1.8.0-beta01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- इस अपडेट में, कंपोज़िशन के दौरान Exception से एक्सटेंड न होने वाले थ्रोएबल को बढ़ाने की समस्या को ठीक किया गया है. इससे 'Pending composition has not been applied' गड़बड़ी हो सकती है. (I356be, b/382094412)
वर्शन 1.8.0-alpha08
15 जनवरी, 2025
androidx.compose.runtime:runtime-*:1.8.0-alpha08
रिलीज़ हो गया है. वर्शन 1.8.0-alpha08 में ये कमिट शामिल हैं.
वर्शन 1.8.0-alpha07
11 दिसंबर, 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha07
रिलीज़ हो गया है. वर्शन 1.8.0-alpha07 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- टूलिंग एपीआई जोड़ा गया है. इससे लेआउट इंस्पेक्टर को उन मामलों में सबकंपोज़िशन को पैरंट कंपोज़िशन से जोड़ने में मदद मिलती है जहां कंपोज़िशन को एक साथ जोड़ने के लिए नोड का इस्तेमाल नहीं किया जाता है. (I4ce3d)
SnapshotId
के लिए अंकगणितीय और खास स्थिरांकों को सार्वजनिक के बजाय, आंतरिक बना दिया गया है. ज़रूरत पड़ने पर,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) में नई कंपोज़िशन बनाने की प्रोसेस को मॉनिटर किया जा सके
snapshotId
कोSnapshot
में जोड़ा गया. यहLong
टाइप का है. साथ ही,id
को बंद कर दिया गया है. स्नैपशॉट के आईडी कोInt
से बदलकरLong
कर दिया गया है, ताकि बहुत ज़्यादा फ़्रेम रेट और लंबे समय तक चलने वाले ऐनिमेशन वाले सिस्टम पर स्नैपशॉट आईडी ओवरफ़्लो न हो. इस टाइप को expect/actual बनाया गया है, ताकि इसे उन प्लैटफ़ॉर्म परInt
या अन्य टाइप के तौर पर इस्तेमाल किया जा सके जिन पर नेटिवLong
टाइप नहीं है. जिन प्लैटफ़ॉर्म में नेटिवLong
नहीं होता है, जैसे कि JavaScript, उन्हें ज़्यादा फ़्रेम रेट (1000 एफ़पीएस से ज़्यादा) से बचना चाहिए. ऐसा न करने पर,Int
हर 24 दिनों में ओवरफ़्लो हो जाएगा. (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 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
SnapshotIdSet
मेंInt.MAX_VALUE
जोड़ने पर स्टैक ओवरफ़्लो की समस्या ठीक की गई. (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) में राज्य के रिकॉर्ड के लिए स्नैपशॉट आईडी दें
- क्लास की पुष्टि करने से जुड़ी गड़बड़ियों (6ee4a6) से बचने के लिए,
SnapshotState***
को फिर से फ़ैक्टर करें - R8 के नियमों में बदलाव करके, थ्रो इनलाइनिंग को रोकें (5beb92)
- कार्रवाइयों को बेहतर तरीके से ऑप्टिमाइज़ करना (d73c5c)
- JVM पर Optimize
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.8
12 फ़रवरी, 2025
androidx.compose.runtime:runtime-*:1.7.8
रिलीज़ हो गया है. वर्शन 1.7.8 में ये कमिट शामिल हैं.
वर्शन 1.7.7
29 जनवरी, 2025
androidx.compose.runtime:runtime-*:1.7.7
रिलीज़ हो गया है. 1.7.6 वर्शन में कोई बदलाव नहीं किया गया है.
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
के बजाय किया जाता है.current
को सिर्फ़@Composable
फ़ंक्शन में ऐक्सेस किया जा सकता है. (Iadbc0) - नए बनाए गए स्टेट ऑब्जेक्ट, अन्य स्नैपशॉट से तुरंत ऐक्सेस किए जा सकते हैं. इनमें ग्लोबल स्नैपशॉट भी शामिल है. हालांकि, ऐसा उनकी शुरुआती स्थिति के साथ होता है. इसके बाद किए गए बदलाव तब तक नहीं दिखते, जब तक कि ऑब्जेक्ट बनाने के समय का स्नैपशॉट लागू नहीं किया जाता.
mutableStateOf()
की शुरुआती स्थिति और इसके प्रिमिटिव वर्शन की वैल्यू,mutableStateOf()
को पैरामीटर के तौर पर पास की गई वैल्यू होती है.mutableStateListOf()
औरmutableStateMapOf()
की शुरुआती स्थिति खाली है.Snapshot.isInSnapshot
औरSnapshot.PreexistingSnapshotId
जोड़े गए हैं. इनका इस्तेमाल, किसी स्टेट ऑब्जेक्ट को चालू करने के लिए किया जाता है, ताकि उसे बनाने के बाद तुरंत ग्लोबल स्नैपशॉट से ऐक्सेस किया जा सके.- कस्टम स्टेट ऑब्जेक्ट, स्नैपशॉट ऑब्जेक्ट में किए गए बदलावों के पैटर्न को फ़ॉलो करके, तुरंत ऐक्सेस किए जा सकते हैं. (I84a17)
- कंपोज़ लाइब्रेरी के लिए
nonSkippingGroupOptimization
चालू करें. इससे androidx में, रीस्टार्ट नहीं किए जा सकने वाले सभी कंपोज़ेबल फ़ंक्शन के लिए जनरेट किया गया कोड ज़्यादा असरदार होता है. आने वाले समय में, हम इसे डिफ़ॉल्ट रूप से चालू करने की योजना बना रहे हैं. I(acbc08) - एक ही फ़्रेम पर सबकंपोज़िशन में कंपोज़ किए जा सकने वाले लैम्डा को अमान्य करें. (98301c)
onRelease
कॉलबैक को उसी क्रम में कॉल करें जिस क्रम मेंonForgotten
को कॉल किया गया था. (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
के बजाय किया जाता है.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) - कंपोज़िशन में हर ऑब्ज़र्वेशन के लिए,
currentRecord
को एक बार पढ़ा गया (b882b2) 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)
- फिर से कंपोज़ करते समय (e19a7e), अमान्यताओं को पास करने के लिए
ScopeMap
का इस्तेमाल करें - अमान्यताओं के मैप को ऑप्टिमाइज़ करें, ताकि सिर्फ़ डिराइव की गई स्थितियां बनी रहें (f11c44)
IdentityArraySet
के इस्तेमाल कोScatterSet
से बदलें (db572e)ScopeMap
(bb0530) मेंremoveScope
को ऑप्टिमाइज़ करें
वर्शन 1.7.0-alpha02
7 फ़रवरी, 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02
रिलीज़ हो गया है. वर्शन 1.7.0-alpha02 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- एक ही फ़्रेम पर सबकंपोज़िशन में कंपोज़ किए जा सकने वाले लैम्डा को अमान्य करें. (98301c)
onRelease
कॉलबैक को उसी क्रम में कॉल करें जिस क्रम मेंonForgotten
को कॉल किया गया था. (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 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
onRelease
कॉलबैक को उसी क्रम में कॉल करें जिस क्रम मेंonForgotten
को कॉल किया गया था. (2cd790)- फ़िल्टर किए गए ऐसे स्टेटस जो
snapshotFlow
में नहीं दिख रहे हैं. (796b80)
वर्शन 1.6.0
24 जनवरी, 2024
androidx.compose.runtime:runtime-*:1.6.0
रिलीज़ हो गया है. वर्शन 1.6.0 में ये कमिट शामिल हैं.
1.5.0 के बाद हुए अहम बदलाव
नई सुविधाएं
- रीकंपोज़िशन लूप के दौरान, खारिज की गई गड़बड़ियों को फिर से दिखाएं (4dff9a)
परफ़ॉर्मेंस ऑप्टिमाइज़ेशन
- स्नैपशॉट की स्थितियों में रिकॉर्डिंग के बदलावों को ऑप्टिमाइज़ करें (28c3fe)
- ऑप्टिमाइज़ करें
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 में ये कमिट शामिल हैं.
नई सुविधाएं और परफ़ॉर्मेंस में सुधार
- ऑप्टिमाइज़ करें
rememberSaveable
(f01d79) - बदलाव रिकॉर्ड होने तक, डिराइव की गई स्थितियों को फिर से पढ़ने की प्रोसेस को कुछ समय के लिए रोकें (f38099)
- कंपोज़िशन की स्थानीय वैल्यू (a337ea) देने की सुविधा को बेहतर बनाया गया है
SideEffect
को@ExplicitGroupsComposable
के तौर पर मार्क किया गया है, ताकि ग्रुप जनरेट न हो. (I74815)- रीयूज़ किए गए कंपोज़िशन लोकल मैप की तुलना न करें (782071)
एपीआई में हुए बदलाव
CompositionLocalProviders
के लिए, एक खास तरह का ओवरलोड जोड़ा गया है. इससे कई वैल्यू को तेज़ी से उपलब्ध कराने के लिए इस्तेमाल किए जाने वाले ओवरहेड से बचा जा सकता है. हालांकि, एक वैल्यू उपलब्ध कराते समय यह ओवरहेड होता है. (I6d640, b/288169379)
गड़बड़ियां ठीक की गईं
- स्लॉट टेबल में मेमोरी लीक की समस्या ठीक की गई (73fcfe)
rememberSaveable
के शून्य होने पर,stateSaver
को वापस लाने के तरीके को ठीक किया गया (90748c)
वर्शन 1.6.0-alpha01
21 जून, 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
रिलीज़ हो गया है. वर्शन 1.6.0-alpha01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- हटाए जाने वाले सबकंपोज़िशन को फिर से कंपोज़ करने की प्रोसेस को स्किप करें. (Ieeb99, b/254645321)
- स्नैपशॉट लागू करने पर, कम किए गए असाइनमेंट. (I65c09)
- अगर स्नैपशॉट में बदलाव नहीं किया गया है, तो
readableHash
मेंDerivedState
को कैलकुलेट करने से बचें (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)- राज्य और
MutableState
के प्रिमिटिव वर्शन जोड़ें (fb3d89) Snapshot.isApplyObserverNotificationPending
जोड़ा गया (I672a5)State
एपीआई के प्रिमिटिव वर्शन जोड़े गए हैं. इससे Int, Long, Float, और Double वैल्यू कोState
ऑब्जेक्ट में ट्रैक किया जा सकता है. इसके लिए, ऑटोबॉक्सिंग के जुर्माने नहीं लगेंगे. इनका इस्तेमाल करने के लिए, फ़ैक्ट्री के नए तरीके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 वाले कंपोज़ेबल के लिए, लाइव एडिट रिग्रेशन की समस्या ठीक की गई
- ON_STOP को कंपोज़िशन ae276f1 के बजाय, फ़्रेम क्लॉक ब्रॉडकास्ट को रोकना चाहिए
- Invalidate
SnapshotStateObserver
scopes for unchanged derived states 84d9b1c - कंपोज़िशन को हटाने के दौरान, संभावित डेड-लॉक की समस्या को ठीक किया गया 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)- राज्य और
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
एपीआई के प्रिमिटिव वर्शन जोड़े गए हैं. इससे Int, Long, Float, और Double वैल्यू कोState
ऑब्जेक्ट में ट्रैक किया जा सकता है. इसके लिए, ऑटोबॉक्सिंग के जुर्माने नहीं लगेंगे. इनका इस्तेमाल करने के लिए, फ़ैक्ट्री के नए तरीके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 वाले कंपोज़ेबल के लिए, लाइव एडिट रिग्रेशन की समस्या ठीक की गई
- ON_STOP को कंपोज़िशन ae276f1 के बजाय, फ़्रेम क्लॉक ब्रॉडकास्ट को रोकना चाहिए
- Invalidate
SnapshotStateObserver
scopes for unchanged derived states 84d9b1c - कंपोज़िशन को हटाने के दौरान, संभावित डेड-लॉक की समस्या को ठीक किया गया 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.Node#coroutineScope
को कोरूटीन लॉन्च करने की अनुमति देने के लिएModifier.Node#coroutineScope
जोड़ा गया (I76ef9)Modifier.Nodes
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
से शुरू की गई वैल्यू का इस्तेमाल करें - Compose नोड के लाइफ़साइकल को मॉनिटर करने के लिए,
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 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- इनलाइन/deprecated-hidden फ़ंक्शन के टाइप/nullability के बारे में ज़्यादा जानकारी (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 को कंपोज़ रनटाइम में ले जाना
- कंपोज़ेबल तरीके को लागू करने के लिए, एपीआई में बदलाव करना
रनटाइम से जुड़ी गड़बड़ियां ठीक की गईं
- मार्कर की जांच करने के लिए, स्लॉट टेबल के लिए रेंज टेस्ट से जुड़ी गड़बड़ी ठीक की गई
- कॉन्टेंट को SubcomposeLayout में ले जाने और उससे बाहर ले जाने की अनुमति देना
- सबकंपोज़िशन के नए कॉन्टेंट में कॉन्टेंट को ले जाने की समस्या ठीक की गई
स्नैपशॉट सिस्टम
- स्नैपशॉट सिस्टम में, मेमोरी मैनेजमेंट, परफ़ॉर्मेंस, और सही तरीके से काम करने से जुड़े कई सुधार किए गए हैं.
- SnapshotStateObserver में Optimize स्कोप हटाने की सुविधा को ऑप्टिमाइज़ किया गया
- पारदर्शी स्नैपशॉट से बनाए गए नेस्ट किए गए स्नैपशॉट हटाना
- ग्लोबल स्नैपशॉट से स्थिति को पढ़ते समय रेस कंडीशन ठीक की गई
- SnapshotStateObserver में Support 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 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- स्लॉट टेबल (b/249076084) से मिली
ArrayIndexOutOfBoundsException
समस्या ठीक की गई
वर्शन 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
API को लॉन्च करना था. इसका इस्तेमाल, शेयर किए गए एलिमेंट ट्रांज़िशन जैसे जटिल यूज़र एक्सपीरियंस को चालू करने के लिए किया जा सकता है.movableContentOf
एपीआई, कंपोज़ किए जा सकने वाले लैम्डा को ऐसे लैम्डा में बदलता है जो अपनी स्थिति और उससे जुड़े नोड को किसी भी नई जगह पर ले जाता है. जब पिछला कॉल कंपोज़िशन से हट जाता है, तो स्थिति को कुछ समय के लिए सेव कर लिया जाता है. अगर लैंबडा को कोई नया कॉल कंपोज़िशन में शामिल होता है, तो स्थिति और उससे जुड़े नोड को नए कॉल की जगह पर ले जाया जाता है. अगर कोई नया कॉल नहीं जोड़ा जाता है, तो स्थिति को हमेशा के लिए हटा दिया जाता है. साथ ही, पर्यवेक्षकों को इसकी सूचना दी जाती है.अगर एक ही कंपोज़िशन में
movableContentOf
लैम्डा को कई बार कॉल किया जाता है, तो हर कॉल के लिए नया स्टेट और नोड बनाया जाता है. साथ ही, जैसे-जैसे कॉल कंपोज़िशन से बाहर निकलते हैं और नए कॉल जुड़ते हैं, वैसे-वैसे स्टेट को पहले बाहर निकलने वाले कॉल से, जुड़ने वाले कॉल में ट्रांसफ़र किया जाता है. यह ट्रांसफ़र, कॉल किए जाने के क्रम के हिसाब से होता है. नए कॉल से न जुड़े सभी स्टेट को हमेशा के लिए हटा दिया जाता है.इसके अलावा, कुछ अन्य नई सुविधाओं को जोड़ने के साथ-साथ, रनटाइम और स्नैपशॉट की स्थिति वाले सिस्टम को स्थिर करने में भी काफ़ी समय लगा. मेमोरी लीक की कई समस्याओं को ठीक किया गया और कोड पाथ को ऑप्टिमाइज़ किया गया.
बदलावों की खास जानकारी वाली सूची यहां दी गई है:
1.2
में नई सुविधाएं
- Add experimental snapshot unsafeEnter/Leave
- Snapshot.asContextElement एक्सपेरिमेंटल एपीआई जोड़ें
- Introduce Snapshot.withoutReadObservation
- कंपोज़िशन में स्टेट को बदलने की अनुमति देना
- Compose में फिर से कंपोज़ करने की सुविधा को ट्रैक करना
1.2
में परफ़ॉर्मेंस
- कंपोज़िशन की स्थानीय परफ़ॉर्मेंस को बेहतर बनाना
- कंपोज़ के लिए बेसलाइन प्रोफ़ाइल, बेंचमार्क का इस्तेमाल करके बनाई जानी चाहिए
1.2
में गड़बड़ियां ठीक की गईं
- रिलीज़ रीकंपोज़ स्कोप से ट्रैकिंग की जानकारी हटाना
- जब किसी अन्य स्कोप में कंपोज़िशन से डिराइव की गई स्थिति को पढ़ा जाता है, तब उसे हटाने से रोकना
- SnapshotStateObserver में ज़्यादा असरदार removeScope() का इस्तेमाल करना
- कंपोज़िशन में, डिराइव की गई स्थिति की डिपेंडेंसी को हटाना
- movable content में inner recomposition के बाद, currentCompositeKeyHash बदलने की समस्या ठीक की गई
- डिस्पोज़ल के दौरान, अमान्य कंपोज़िशन को हटाना
- रीकंपोज़िशन के दौरान, डिराइव की गई स्थिति को पढ़ने से जुड़ी समस्या ठीक की गई
- डिराइव किए गए स्टेट ऑब्जेक्ट को ऑब्ज़र्व करते समय मेमोरी लीक की समस्या ठीक की गई
- movableContent के कंपोज़िट हैश की को एक जैसा रखने के लिए ठीक किया गया
- ऐसी समस्या को ठीक किया गया है जिसमें कंपोज़र क्रैश हो जाता था
- पक्का करें कि किसी ग्रुप को अमान्य करने पर, उसे फिर से कंपोज़ किया जा सके
- इनपुट के साथ 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 UI applier को टारगेट करते हैं. जिस फ़ंक्शन को किसी दूसरे ऐप्लिकेशन पर टारगेट करना है उसे टारगेट मार्कर एनोटेशन को साफ़ तौर पर सप्लाई करना होगा. (I40804)
वर्शन 1.2.0-alpha08
20 अप्रैल, 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08
रिलीज़ हो गया है. वर्शन 1.2.0-alpha08 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
CompositionTracer
इंटरफ़ेस मेंTracingInProgress
जोड़ा गया. (Ic6f12)- Composer (I0c873) में
recomposeScopeIdentity
जोड़ना - ट्रेसिंग से जुड़े प्रतिबंधित एपीआई (Composer.setTracer) को
OptIn(InternalComposeTracingApi)
पर सेट किया गया है. (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
जोड़े गए हैं. इनकी मदद से, कंपाइल टाइम रिपोर्टिंग की जा सकती है. इससे यह पता चलता है कि किसी ऐप्लिकेशन को टारगेट करने वाले कंपोज़ेबल फ़ंक्शन को कब कॉल किया गया था.ज़्यादातर मामलों में, कंपोज़ कंपाइलर प्लगिन से एनोटेशन का अनुमान लगाया जा सकता है. इसलिए, इन एनोटेशन का सीधे तौर पर इस्तेमाल कम ही करना चाहिए. ऐसे मामले जिनमें अनुमान नहीं लगाया जा सकता उनमें कस्टम ऐप्लिकेशन बनाना और उसका इस्तेमाल करना, ऐब्स्ट्रैक्ट कंपोज़ेबल फ़ंक्शन (जैसे कि इंटरफ़ेस के तरीके), कंपोज़ेबल लैम्ब्डा (स्थानीय वैरिएबल और पैरामीटर का अनुमान लगाया जाता है) वाले फ़ील्ड या ग्लोबल वैरिएबल या
ComposeNode
या उससे जुड़े कंपोज़ेबल फ़ंक्शन का इस्तेमाल करना शामिल है.कस्टम ऐप्लिकेशन के लिए,
ComposeNode
याReusableComposeNode
को कॉल करने वाले कंपोज़ेबल फ़ंक्शन को फ़ंक्शन और किसी भी कंपोज़ेबल लैम्डा पैरामीटर टाइप के लिए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
लैम्डा को कई बार कॉल किया जाता है, तो हर कॉल के लिए नई स्थिति और नोड बनाए जाते हैं. साथ ही, जैसे-जैसे कॉल कंपोज़िशन से बाहर निकलते हैं और नए कॉल कंपोज़िशन में शामिल होते हैं, स्थिति को पहले बाहर निकलने वाले कॉल से, शामिल होने वाले कॉल में ट्रांसफ़र किया जाता है. ऐसा कॉल किए जाने के क्रम में होता है. नए कॉल से न जुड़े सभी स्टेट को हमेशा के लिए हटा दिया जाता है. (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 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
NullPointerException
कोandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
पर ठीक किया गया (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 के हिसाब से, मटीरियल कॉम्पोनेंट अपने लेआउट स्पेस को बढ़ाएंगे, ताकि टच टारगेट साइज़ के लिए, मटीरियल सुलभता के दिशा-निर्देशों का पालन किया जा सके. उदाहरण के लिए, अगर आपने बटन का साइज़ छोटा सेट किया है, तब भी बटन का टच टारगेट कम से कम
48x48dp
तक बढ़ जाएगा. इससे Compose Material, Material Design Components के जैसा ही काम करता है. साथ ही, Views और 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 Compiler अब Compose Runtime (1.0) के पुराने वर्शन के साथ काम करता है. इस बदलाव से पहले, Compose Compiler सिर्फ़ उसी वर्शन या उसके बाद के Compose Runtime के साथ काम करता था. इस बदलाव के बाद, Compose Compiler, 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
में दिए जाते हैं. फ़ाइल में हर लाइन के लिए एक नियम तय किया जाता है. इस मामले में, नियम एक ऐसा पैटर्न होता है जिसका इस्तेमाल लाइब्रेरी में मौजूद तरीकों या क्लास से मिलान करने के लिए किया जाता है. इन नियमों का सिंटैक्स, एआरटी प्रोफ़ाइल के ऐसे फ़ॉर्मैट का सुपरसेट है जिसे आसानी से पढ़ा जा सकता है. इसका इस्तेमाल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
फ़्लैग वाली किसी भी विधि से पता चलता है कि यह एक ऐसी विधि है जिसे स्टार्टअप के बाद कॉल किया जाता है.इस फ़ाइल में मौजूद क्लास से पता चलता है कि इसका इस्तेमाल स्टार्टअप के दौरान किया जाता है. इसलिए, इसे हीप में पहले से ही असाइन कर दिया जाना चाहिए, ताकि क्लास लोडिंग की लागत से बचा जा सके.
यह कैसे काम करता है?
- लाइब्रेरी इन नियमों को तय कर सकती हैं. ये नियम, एएआर आर्टफ़ैक्ट में पैकेज किए जाएंगे. जब इन आर्टफ़ैक्ट को शामिल करके कोई ऐप्लिकेशन बनाया जाता है, तो इन नियमों को एक साथ मर्ज कर दिया जाता है. इसके बाद, मर्ज किए गए नियमों का इस्तेमाल करके, ऐप्लिकेशन के लिए कॉम्पैक्ट बाइनरी एआरटी प्रोफ़ाइल बनाई जाती है. जब ऐप्लिकेशन को डिवाइसों पर इंस्टॉल किया जाता है, तो एआरटी इस प्रोफ़ाइल का इस्तेमाल कर सकता है. इससे ऐप्लिकेशन के किसी खास सबसेट को पहले से कंपाइल किया जा सकता है, ताकि ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाया जा सके. खास तौर पर, पहली बार ऐप्लिकेशन चलाने पर. ध्यान दें कि इससे डीबग किए जा सकने वाले ऐप्लिकेशन पर कोई असर नहीं पड़ेगा.
वर्शन 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)rememberSaveable()
के इनपुट पैरामीटर (I1b110, b/182403380) के साथ इस्तेमाल किए जाने पर, पुरानी वैल्यू को वापस लाने से जुड़ी समस्या को ठीक किया गया
वर्शन 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) के सार्वजनिक इस्तेमाल पर पाबंदियां लागू करें
- navigation-compose के डेस्टिनेशन में इस्तेमाल किए जाने पर,
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 Beta का पहला वर्शन है.
एपीआई में हुए बदलाव
Recomposer.runRecomposeConcurrentlyAndApplyChanges
जोड़ें मुख्य फ़्रेम लूप से बाहर, अमान्य कंपोज़िशन को फिर से कंपोज़ करने के लिए एक्सपेरिमेंटल एपीआई. (I342d0)- @ReadOnlyComposable के तौर पर मार्क किए गए सभी कंपोज़ेबल की पुष्टि अब कंपाइल-टाइम पर की जाती है. इससे यह पक्का किया जाता है कि वे सिर्फ़ अन्य @ReadOnlyComposables को कॉल करें (I58961)
compositionLocalOf
औरstaticCompositionLocalOf
के लिएdefaultFactory
की जानकारी देना अब ज़रूरी है. पहले यह जानकारी देना ज़रूरी नहीं था.इस बदलाव से, उन नॉन-नलेबल टाइप के लिए संभावित टाइप गड़बड़ी हट जाती है जिनके लिए कोई डिफ़ॉल्ट फ़ैक्ट्री नहीं दी गई थी. इससे पहले, यह नॉन-नलेबल टाइप के लिए शून्य रेफ़रंस देता था.
शून्य वैल्यू वाले टाइप के लिए,
{ null }
को डिफ़ॉल्ट फ़ैक्ट्री के तौर पर इस्तेमाल करें.हमारा सुझाव है कि नॉन-नलेबल टाइप के साथ लोकल का इस्तेमाल न करें. हालांकि, ऐसा तब किया जा सकता है, जब कोई डिफ़ॉल्ट वैल्यू दी जा सकती हो. अगर कोई डिफ़ॉल्ट वैल्यू मौजूद नहीं है, तो
defaultFactory
लैम्डा को एक अपवाद दिखाना चाहिए. हालांकि, अपवाद का मतलब है कि स्थानीय स्तर पर काम करने वाले लोगों को इस बात पर निर्भर रहना होगा कि यह सुविधा उपलब्ध कराई गई है या नहीं. टाइप सिस्टम इसे लागू नहीं करता है. (Ifbd2a)कंपोज़ रनटाइम (I3252c) से, इस्तेमाल में नहीं रहे सिंबल हटा दिए गए हैं
emptyContent()
को हटा दिया गया है. इसके बजाय,{}
का इस्तेमाल करें. (Idb33f, b/179432510)Providers का नाम बदलकर CompositionLocalProvider कर दिया गया है
- Composition कंस्ट्रक्टर अब key पैरामीटर स्वीकार नहीं करता है. साथ ही, इसे बंद कर दिया गया है.
- 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 में ये बदलाव किए गए हैं:
- TopAppBar/BottomAppBar में contentPadding पैरामीटर जोड़ा गया है, ताकि डिफ़ॉल्ट पैडिंग को पसंद के मुताबिक बनाया जा सके.
- ज़रूरी पैरामीटर को वैकल्पिक पैरामीटर से पहले रखने के लिए, BackdropScaffold में पैरामीटर का क्रम बदला गया है, ताकि एपीआई के दिशा-निर्देशों का पालन किया जा सके.
- BottomNavigationItem में
icon
पैरामीटर कोselected
औरonClick
के बाद ले जाया गया. - BottomNavigationItem में
alwaysShowLabels
पैरामीटर का नाम बदलकरalwaysShowLabel
कर दिया गया है. - कुछ कॉम्पोनेंट में
bodyContent
पैरामीटर का नाम बदलकर सिर्फ़content
कर दिया गया है. ButtonDefaults.buttonColors()
में पैरामीटर का क्रम बदला गया है. कृपया ध्यान दें कि पैरामीटर के टाइप में कोई बदलाव नहीं हुआ है. इसलिए, आपके कोड में कोई गड़बड़ी नहीं होगी. कृपया पक्का करें कि आपने नाम वाले पैरामीटर का इस्तेमाल किया हो या क्रम को मैन्युअल तरीके से अपडेट किया हो. ऐसा न करने पर, आपका कोड पहले की तरह काम नहीं करेगा.secondaryVariant
पैरामीटर कोdarkColors()
में जोड़ा गया. आम तौर पर, यह रंग गहरे रंग वाली थीम में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)
- Ambients का नाम बदलकर, Ambient -> CompositionLocal के नाम के मुताबिक कर दिया गया है. पहले, ऐंबिएंट का नाम AmbientFoo होता था. अब कंपोज़िशन लोकल का नाम LocalFoo है. (I2d55d)
- Ambient का नाम बदलकर CompositionLocal कर दिया गया है. साथ ही, ambientOf / staticAmbientOf का नाम बदलकर compositionLocalOf / staticCompositionLocalOf कर दिया गया है. इस बदलाव से, CompositionLocal के मकसद को ज़्यादा साफ़ तौर पर समझने में मदद मिलती है. यह कंपोज़िशन के लिए लोकल वैल्यू देने / पाने का एक तरीका है. CompositionLocal इंस्टेंस के नाम के आगे
Local
प्रीफ़िक्स होना चाहिए. जैसे, val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - takeMutableSnapshot और takeSnapshot को Snapshot के कंपैनियन मेथड के तौर पर इस्तेमाल किया जा सकता है. (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 का नाम बदलकर cancel कर दिया गया है, ताकि इसे close से अलग किया जा सके. (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 अब प्रोसेस में चल रही कंपोज़िशन की स्थिति को देखने के लिए, read-only RecomposerInfo का ग्लोबल StateFlow उपलब्ध कराता है. 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
was called multiple time if the object was used in subcompositions, such asWithConstraints
andScaffold
making the singleonEnter
call guarantee unreliable and it was removed forRememberObserver
.RememberObserver
,onAbandoned
को जोड़ता है. इसे तब कॉल किया जाता है, जबremember
को पास किए गए कॉलबैक सेRememberObserver
इंस्टेंस वापस आ जाता है, लेकिन कंपोज़िशन की स्थिति में इसे याद नहीं रखा जाता. इसलिए, इसे कभी भीonRemembered
कॉल नहीं किया जाएगा. ऐसा तब हो सकता है, जब कोई अपवाद कंपोज़िशन को पूरा होने से पहले ही खत्म कर देता है या कंपोज़िशन को इसलिए खारिज कर दिया जाता है, क्योंकि जिस स्थिति के लिए कंपोज़िशन बनाई जा रही थी वह अब मौजूदा नहीं है या अब उसकी ज़रूरत नहीं है. अगर ऊपर दिए गए सिंगल रेफ़रंस वाले सुझाव के बादRememberObserver
का इंस्टेंस, किसी बाहरी संसाधन को ट्रैक कर रहा है, तोonForgotten
औरonAbandoned
, दोनों से पता चलता है कि अब संसाधन की ज़रूरत नहीं है. अगर ऑब्जेक्ट,onRemembered
में शुरू किए गए काम या असाइन किए गए संसाधनों को ट्रैक कर रहा है, तोonAbandoned
को अनदेखा किया जा सकता है. ऐसा इसलिए, क्योंकि अगरonRemembered
को कॉल किया जाता है, तोonAbandoned
को कॉल नहीं किया जाएगा. (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)
ComposeView एपीआई को बड़ा करें, ताकि Compose पर आधारित व्यू को रीसाइकल किया जा सके. साथ ही, कंपोज़िशन को डिस्पोज़ किया जा सके, ताकि बाद में उसे फिर से बनाया जा सके. विंडो के स्कोप वाले Recomposer और CompositionReference को इंस्टॉल करने और खोजने के लिए एपीआई जोड़े गए हैं, ताकि चाइल्ड कंपोज़िशन बनाई जा सकें.
[Abstract]ComposeViews की कंपोज़िशन डिस्पोज़ल की रणनीति को कॉन्फ़िगर करने के लिए, ViewCompositionStrategy जोड़ें; डिफ़ॉल्ट व्यवहार, विंडो के अलग होने पर डिस्पोज़ करना है. (I860ab)
गड़बड़ियां ठीक की गईं
- Recomposer अब अपनी मौजूदा स्थिति का फ़्लो दिखाता है. इससे इसकी गतिविधि और इससे जुड़े इफ़ेक्ट की गतिविधि को मॉनिटर किया जा सकता है. (Ifb2b9)
- अब keyEvent.nativeKeyEvent के ज़रिए, native keyEvent को ऐक्सेस किया जा सकता है (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 के तौर पर मार्क किया गया था. अब ये कंपोज़ मॉड्यूल के इंटरनल हैं.
कंपोज़िशन की जानकारी निकालने के लिए, ui-tooling API की जगह CompositionData और CompositionGroup को जोड़ा गया है. ये सार्वजनिक हैं, लेकिन इनका इस्तेमाल ui-tooling API के बाहर नहीं किया जा सकता. ऐसा इसलिए, क्योंकि ये ui-tooling API को ऐसी जानकारी देते हैं जिसे वह समझता है (I31a9c)
Applier क्लास को अब (Id85b0) नहीं माना जाता
Applier
इंटरफ़ेस को बदल दिया गया है, ताकि ट्री को ऊपर से नीचे की ओर बनाने के बजाय, नीचे से ऊपर की ओर बनाना आसान हो.insert()
तरीके का नाम बदलकरinsertTopDown()
कर दिया गया है.insertBottomUp()
नाम का एक नया तरीका जोड़ा गया है.लागू करने वाला व्यक्ति,
insertTopDown()
याinsertBottomUp()
का इस्तेमाल करके, उस ट्री में नोड डालता है जिसे वह बदल रहा है. यह इस बात पर निर्भर करता है कि कौनसी कार्रवाई बेहतर तरीके से काम करती है.कुछ ट्री, जैसे कि
LayoutNode
औरView
, को टॉप-डाउन की तुलना में बॉटम-अप तरीके से बनाना ज़्यादा आसान होता है. इस बदलाव से पहले, बॉटम-अप को लागू करने के लिए इंसर्ट के स्टैक की ज़रूरत होती थी. इसे हर उस ऐप्लिकेशन पर कॉपी करना पड़ता था जिसके लिए परफ़ॉर्मेंस के लिए बॉटम-अप कंस्ट्रक्शन की ज़रूरत होती थी. इस बदलाव के साथ,Applier
ओवरराइडinsertBottomUp()
का इस्तेमाल, ट्री को बॉटम-अप तरीके से बनाने के लिए किया जाता है. वहीं,insertTopDown()
का इस्तेमाल, ट्री को टॉप-डाउन तरीके से बनाने के लिए किया जाता है. (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 को provide के विकल्प के तौर पर जोड़ा गया था, ताकि परिवेश की जानकारी दी जा सके. इसका इस्तेमाल परिवेश की उन वैल्यू को तय करने के लिए किया जा सकता है जो सिर्फ़ तब सेट की जाएंगी, जब परिवेश की कोई वैल्यू पहले से मौजूद न हो. (Id6635, b/171024925)
- LaunchedTask का नाम बदलकर LaunchedEffect कर दिया गया है, ताकि यह SideEffect और DisposableEffect एपीआई के साथ काम कर सके. सबसे सही तरीकों को बढ़ावा देने के लिए, LaunchedEffect में subject पैरामीटर के बिना इस्तेमाल करने की अनुमति नहीं है. (Ifd3d4)
- Applier में अब onBeginChanges/onEndChanges कॉलबैक हैं. इन्हें तब शुरू किया जाता है, जब कंपोज़र ट्री में बदलाव करना शुरू करता है या बदलाव करने की प्रोसेस पूरी हो जाती है. अगर ज़रूरत हो, तो इनका इस्तेमाल रिसॉर्स मैनेजमेंट के लिए किया जा सकता है. (Icf476)
- Recomposer को अब कंस्ट्रक्शन के समय 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 counterpart API जोड़ा गया. यह onCommit-with-params की भूमिका निभाता है, लेकिन इसमें onDispose की ज़रूरत होती है.
- rememberUpdatedState API जोड़ा गया है, ताकि रीयूज़ेबल इफ़ेक्ट या लॉन्च्ड टास्क जैसी लंबी चलने वाली प्रोसेस में, रीयूज़ेबल कंपोज़िशन से डेटा पब्लिश किया जा सके.
- (Id50b9)
- MutableVector अब RandomAccess को लागू करता है (I85d73, b/170461551)
- कंपोज़िशन के साइड इफ़ेक्ट को कंपोज़िशन से मैनेज किए जा रहे ऑब्जेक्ट पर लागू करने के लिए, SideEffect कंपोज़ेबल जोड़ा गया. 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 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- Experimental Modifier.pointerInput suspending input modifier (Ia77d2)
- हर स्क्रोल पर सबकंपोज़िशन में कम काम करके, LazyColumn/Row की स्क्रोलिंग परफ़ॉर्मेंस को बेहतर बनाया गया है. Composition क्लास के लिए, नया hasInvalidations() तरीका जोड़ा गया है. Recomposer के hasPendingChanges() तरीके का नाम बदलकर hasInvalidations() कर दिया गया है (Ib2f32, b/168293643, b/167972292, b/165028371)
- कंपोज़िशन से कोरूटीन लॉन्च करने के लिए, produceState API जोड़ें. इससे समय के साथ
State<T>
की वैल्यू अपडेट होती है (Id4a57) - launchInComposition का नाम बदलकर LaunchedTask कर दिया गया है, ताकि यह Compose API के दिशा-निर्देशों (I99a8e) के मुताबिक हो
- कस्टम लेआउट में place() कॉल का क्रम अब चाइल्ड विजेट के ड्रॉइंग ऑर्डर को तय करता है (Ibc9f6)
वर्शन 1.0.0-alpha04
1 अक्टूबर, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
रिलीज़ हो गया है. वर्शन 1.0.0-alpha04 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- OwnerScope जोड़ा गया है, ताकि लेआउट और ड्राइंग के ऑब्ज़र्वेशन स्कोप को इकट्ठा किया जा सके. ऐसा तब किया जाता है, जब वे अब मान्य नहीं रहते. (Ic4cf8)
- गणना के आधार पर State ऑब्जेक्ट बनाने के लिए, derivedStateOf API जोड़ा गया है. यह अन्य State ऑब्जेक्ट को पढ़ सकता है और उनसे जानकारी ले सकता है (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()
को ओवरराइड न करने वाली क्लास का इस्तेमाल करते समय), इसका ऐप्लिकेशन पर कोई खास असर नहीं पड़ेगा.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 को जोड़ा गया है. यह एक लो लेवल प्रिमिटिव है. इसकी मदद से, मेज़रमेंट के दौरान चाइल्ड कॉम्पोनेंट बनाए जा सकते हैं. ऐसा तब किया जाता है, जब हमें सबट्री कंपोज़िशन के लिए कुछ ऐसी वैल्यू का इस्तेमाल करना हो जो मेज़रमेंट के दौरान ही उपलब्ध होती हैं. उदाहरण के लिए, WithConstraints को SubcomposeLayout का इस्तेमाल करके लागू नहीं किया जाता है. (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 के ज़्यादातर उपयोगकर्ताओं को किसी कोड को अपडेट करने की ज़रूरत नहीं होगी.
इस काम को पूरा करने के लिए, सभी कंपोज़ेबल फ़ंक्शन के JVM सिग्नेचर में बदलाव किया गया है. एक पैरामीटर स्वीकार करने वाले कंपोज़ेबल फ़ंक्शन को, तीन पैरामीटर स्वीकार करने वाले फ़ंक्शन में बदल दिया जाता है. अतिरिक्त पैरामीटर, कंपोज़र और एक ‘key’ पूर्णांक होते हैं. यह एक बिटमास्क पूर्णांक होता है, जिसका इस्तेमाल कॉल के ज़रिए मेटाडेटा को आगे बढ़ाने के लिए किया जाता है.
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. restartableFunction और restartableFunctionN को अपडेट किया गया, ताकि कंपाइल टाइम के अतिरिक्त पैरामीटर शामिल किए जा सकें (I60756, b/143464846)MutableVector (Icccf7) में sortWith और removeRange जोड़ा गया
CompositionLifecycleObserver (I24289) के लिए, डिफ़ॉल्ट तरीके से लागू करने की सुविधा जोड़ी गई
Applier को अब कंपोज़िशन (Ibe697) को हटाने के लिए, clear() तरीके की ज़रूरत होती है
MutableVector में asMutableList() जोड़ा गया है, ताकि इसे पूरी सूची को कॉपी किए बिना, सार्वजनिक एपीआई को पास किया जा सके. (I298df)
इवेंट के जवाब में जॉब लॉन्च करने के लिए, कंपोज़िशन में मैनेज किया गया CoroutineScope पाने के लिए, rememberCoroutineScope() जोड़ा गया. (I0e264)
MutableVector एक नया कलेक्शन है, जो किसी भी स्टैंडर्ड कलेक्शन इंटरफ़ेस को लागू नहीं करता है. यह कलेक्शन, अन्य ज़रूरी शर्तों के मुकाबले ज़्यादा तेज़ी से काम करता है. इसका इस्तेमाल सिर्फ़ इंटरनल तौर पर किया जा सकता है. (I8ebd6)
Kotlin कंपोज़ के जिस वर्शन की ज़रूरत है उसमें समस्या से बचने के लिए,
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) की वजह से होता था
Recompose कंपोज़ेबल अब काम का ऐब्स्ट्रैक्शन नहीं है. MutableState असाइनमेंट की वजह से, ज़्यादातर रीकंपोज़िशन होने चाहिए. इससे ज़्यादा के लिए, हमारा सुझाव है कि आप
invalidate
फ़ंक्शन का इस्तेमाल करके, मौजूदा स्कोप को फिर से कंपोज़ करें. (Ifc992)'निरीक्षण करें' अब एक उपयोगी ऐब्स्ट्रैक्शन नहीं है. अगर आपको इसे दोहराना है, तो इसे लागू करने के लिए सिर्फ़ एक कंपोज़ेबल फ़ंक्शन बनाया जा सकता है. यह कंपोज़ेबल लैम्डा पैरामीटर को एक्ज़ीक्यूट करता है. उदाहरण के लिए,
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct को @ComposableContract(restartable=false) के पक्ष में बंद कर दिया गया था (If4708)
हाल ही में लॉन्च किए गए StateFlow के लिए एक अडैप्टर जोड़ा गया है. इससे हमें शुरुआती वैल्यू को पहले से भरने की अनुमति मिलती है, ताकि लौटाया गया State, नॉन-नलेबल हो (I61dd8, b/156233789)
फ़्लो के लिए अडैप्टर जोड़ा गया. इस्तेमाल का उदाहरण: val value by 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 के लिए अडैप्टर वाला नया आर्टफ़ैक्ट है. इस्तेमाल का उदाहरण: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
Rx अडैप्टर में शुरुआती वैल्यू तय न करने की सुविधा अब काम नहीं करती. शून्य का इस्तेमाल हमेशा सबसे अच्छा डिफ़ॉल्ट नहीं होता. उदाहरण के लिए, जब आपके पास कोई सूची होती है, तो emptyList() या किसी अन्य उचित डिफ़ॉल्ट (I00025, b/161348384) से शुरू करना बेहतर होता है
ui-rxjava2 जोड़ा गया. यह RxJava2 के लिए अडैप्टर वाला नया आर्टफ़ैक्ट है. इस्तेमाल का उदाहरण: val value by 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)
- Modifier पर drawBackground एक्सटेंशन एपीआई के पक्ष में, DrawBackground एपीआई को हटाया गया. कोड पाथ को कम करने के साथ-साथ, कंपोज़िशन के हिस्से के तौर पर बनाए जाने वाले मॉडिफ़ायर की ज़रूरत को खत्म करने के लिए, कलर, ब्रश, और पेंट drawBackground के कोड में बदलाव किया गया है. (I0343a)
- ज़्यादा लेवल वाले Compose API अपडेट किए गए हैं. ये Canvas को CanvasScope के बजाय Canvas को दिखाते हैं. इससे उपभोक्ताओं को अपने पेंट ऑब्जेक्ट बनाए रखने की ज़रूरत नहीं पड़ती. जिन उपभोक्ताओं को अब भी Canvas का ऐक्सेस चाहिए वे drawCanvas एक्सटेंशन का इस्तेमाल कर सकते हैं. यह तरीका, Canvas के साथ ड्राइंग कमांड जारी करने के लिए कॉलबैक उपलब्ध कराता है. (I80afd)
- WithConstraints ट्रेलिंग लैम्डा एपीआई को बदल दिया गया है. अब इसमें दो पैरामीटर के बजाय, रिसीवर स्कोप है. यह कंस्ट्रेंट और layoutDirection के साथ-साथ, Dp में minWidth, maxWidth, minHeight, और maxHeight प्रॉपर्टी भी उपलब्ध कराता है (I91b9a, b/149979702)
- सिमेट्रिक पैडिंग मॉडिफ़ायर जोड़ा गया. (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 के सदस्यों को अब Row और Column के बाहर से ऐक्सेस किया जा सकता है. (I3a641)
- LayoutFlexible का नाम बदलकर LayoutWeight कर दिया गया है. भरने के लिए टाइट पैरामीटर का नाम बदला गया. (If4738)
- WithConstraints को LayoutDirection पैरामीटर (I6d6f7) मिला
- बैकग्राउंड का नाम बदलकर DrawBackground कर दिया गया है. साथ ही, इसे डिफ़ॉल्ट रूप से याद रखने की सुविधा चालू कर दी गई है (Ia0bd3)
- ButtonStyle को अलग-अलग फ़ंक्शन से बदल दिया गया है. साथ ही, टेक्स्ट (स्ट्रिंग) ओवरलोड को हटा दिया गया है. इस्तेमाल की जानकारी के लिए, अपडेट किए गए सैंपल देखें. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
औरrunOnUiThread
अब ComposeTestRule पर उपलब्ध तरीकों के बजाय, ग्लोबल फ़ंक्शन हैं. (Icbe8f)
बाहरी योगदान
- Compose Runtime की पोर्टिंग लेयर (I6847d) से, Looper और Handler जैसे गैर-ज़रूरी एपीआई हटाएं
- शुरुआती वैल्यू के बिना
Flow<T>.collectAsState()
को बंद कर दिया गया है. इसके बजाय,StateFlow<T>
का इस्तेमाल करें या साफ़ तौर पर शुरुआती वैल्यू पास करें. (I63f98, b/157674865)