कैसे करें

परफ़ॉर्मेंस से जुड़ी ज़्यादा जानकारी

8 मिनट में पढ़ा जा सकता है
3 लेखक
Ben Weiss, Breana Tate, Jossi Wolf

शांत रहें और हम आपको परफ़ॉर्मेंस के बारे में ज़्यादा जानकारी देते हैं.

परफ़ॉर्मेंस स्पॉटलाइट वीक के तीसरे दिन आपका स्वागत है. आज हम ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़े अहम पहलुओं के बारे में जानकारी और दिशा-निर्देश शेयर कर रहे हैं. हम प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन, Jetpack Compose की परफ़ॉर्मेंस में सुधार, और पर्दे के पीछे काम करने से जुड़ी बातों के बारे में बता रहे हैं. चलिए, शुरू करते हैं.

प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन

बेसलाइन प्रोफ़ाइलें और स्टार्टअप प्रोफ़ाइलें, Android ऐप्लिकेशन के स्टार्ट होने और रनटाइम की परफ़ॉर्मेंस को बेहतर बनाने के लिए ज़रूरी हैं. ये परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के एक ग्रुप का हिस्सा हैं, जिसे प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन कहा जाता है.

जब किसी ऐप्लिकेशन को पैकेज किया जाता है, तो d8 dexer क्लास और तरीकों को लेता है और आपके ऐप्लिकेशन की classes.dex फ़ाइलों को भरता है. जब कोई उपयोगकर्ता ऐप्लिकेशन खोलता है, तो ये डेक्स फ़ाइलें एक के बाद एक लोड होती हैं. ऐसा तब तक होता है, जब तक ऐप्लिकेशन शुरू नहीं हो जाता. स्टार्टअप प्रोफ़ाइल देने से, d8 को यह पता चलता है कि पहली classes.dex फ़ाइलों में किन क्लास और तरीकों को पैक करना है. इस स्ट्रक्चर की वजह से, ऐप्लिकेशन को कम फ़ाइलें लोड करनी पड़ती हैं. इससे ऐप्लिकेशन तेज़ी से शुरू होता है.

बेसलाइन प्रोफ़ाइलें, Just in Time (JIT) कंपाइलेशन के चरणों को उपयोगकर्ता के डिवाइसों से हटाकर डेवलपर के कंप्यूटर पर ले जाती हैं. जनरेट किए गए, कंपाइल किए गए, और पहले से तैयार (एओटी) कोड से, स्टार्टअप में लगने वाले समय और रेंडरिंग से जुड़ी समस्याओं को कम किया जा सकता है.

Trello और बेसलाइन प्रोफ़ाइलें

हमने Trello ऐप्लिकेशन के इंजीनियरों से पूछा कि बेसलाइन प्रोफ़ाइलों से उनके ऐप्लिकेशन की परफ़ॉर्मेंस पर क्या असर पड़ा. उपयोगकर्ता की मुख्य गतिविधि में बेसलाइन प्रोफ़ाइलें लागू करने के बाद, Trello को ऐप्लिकेशन के स्टार्टअप टाइम में 25 % की कमी देखने को मिली.

image.png

Trello ने बेसलाइन प्रोफ़ाइलों का इस्तेमाल करके, अपने ऐप्लिकेशन के स्टार्टअप टाइम को 25 % तक कम किया.

Meta पर बेसलाइन प्रोफ़ाइलें

इसके अलावा, Meta के इंजीनियरों ने हाल ही में एक लेख पब्लिश किया है. इसमें बताया गया है कि वे बेसलाइन प्रोफ़ाइलों की मदद से, अपने Android ऐप्लिकेशन की परफ़ॉर्मेंस को कैसे बेहतर बना रहे हैं.

image.png

Meta के ऐप्लिकेशन में, टीमों ने बेसलाइन प्रोफ़ाइलें लागू करने के बाद, कई अहम मेट्रिक में 40 % तक की बढ़ोतरी देखी है.

इस तरह की तकनीकी सुधारों से, उपयोगकर्ताओं को बेहतर अनुभव मिलता है. साथ ही, कारोबार को आगे बढ़ाने में भी मदद मिलती है. इसे अपने प्रॉडक्ट के मालिकों, सीटीओ, और फ़ैसले लेने वाले लोगों के साथ शेयर करने से, आपके ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने में भी मदद मिल सकती है.

बेसलाइन प्रोफ़ाइल का इस्तेमाल शुरू करना

बेसलाइन या स्टार्टअप प्रोफ़ाइल जनरेट करने के लिए, आपको macrobenchmark टेस्ट लिखना होगा. इससे ऐप्लिकेशन का इस्तेमाल किया जा सकेगा. टेस्ट के दौरान, प्रोफ़ाइल का डेटा इकट्ठा किया जाता है. इसका इस्तेमाल ऐप्लिकेशन कंपाइल करने के दौरान किया जाएगा. ये टेस्ट, नए UiAutomator API का इस्तेमाल करके लिखे गए हैं. इसके बारे में हम कल बात करेंगे.

इस तरह का बेंचमार्क लिखना आसान है. साथ ही, पूरा सैंपल GitHub पर देखा जा सकता है.

@Test

fun profileGenerator() {

    rule.collect(

        packageName = TARGET_PACKAGE,

        maxIterations = 15,

        stableIterations = 3,

        includeInStartupProfile = true

    ) {

        uiAutomator {

            startApp(TARGET_PACKAGE)

        }

    }


}

ज़रूरी बातें

सबसे पहले, अपने ऐप्लिकेशन के उस पाथ के लिए, मैक्रोबेंचमार्क टेस्ट की बेसलाइन प्रोफ़ाइल और स्टार्टअप प्रोफ़ाइल लिखें जिसे आपके उपयोगकर्ता सबसे ज़्यादा इस्तेमाल करते हैं. इसका मतलब है कि उपयोगकर्ता आपके ऐप्लिकेशन में किस मुख्य एंट्री पॉइंट से आते हैं. आम तौर पर, यह लॉग इन करने के बाद होता है. इसके बाद, ज़्यादा टेस्ट केस लिखें, ताकि सिर्फ़ बेसलाइन प्रोफ़ाइलों के लिए ज़्यादा जानकारी इकट्ठा की जा सके. यह ज़रूरी नहीं है कि बेसलाइन प्रोफ़ाइल में हर चीज़ शामिल हो. सबसे ज़्यादा इस्तेमाल किए जाने वाले पाथ पर बने रहें और फ़ील्ड में परफ़ॉर्मेंस को मेज़र करें. इसके बारे में ज़्यादा जानकारी, कल की पोस्ट में दी जाएगी.

प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन का इस्तेमाल शुरू करना

बेसलाइन प्रोफ़ाइल के काम करने का तरीका जानने के लिए, Android Developers Summit का यह वीडियो देखें:

ज़्यादा जानकारी के लिए, Android Build Time का यह एपिसोड देखें: 

ज़्यादा जानकारी के लिए, हमारे पास बेसलाइन प्रोफ़ाइल और स्टार्टअप प्रोफ़ाइल के बारे में पूरी जानकारी मौजूद है.

Jetpack Compose की परफ़ॉर्मेंस में सुधार

Android के लिए यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क की परफ़ॉर्मेंस को बेहतर बनाने के लिए, इंजीनियरिंग टीम ने काफ़ी काम किया है. Jetpack Compose के 1.9 वर्शन में, स्क्रोल जंक की समस्या 0.2 % तक कम हो गई है. यह जानकारी, लंबे समय तक स्क्रोल करने से जुड़े बेंचमार्क टेस्ट के दौरान मिली है. 

jankyFrames.png

ये सुधार, हाल ही में रिलीज़ किए गए वर्शन में मौजूद कई सुविधाओं की वजह से किए जा सके हैं.

पसंद के मुताबिक कैश मेमोरी में सेव करने की सुविधा

डिफ़ॉल्ट रूप से, लेज़ी लेआउट सिर्फ़ एक आइटम को स्क्रोलिंग की दिशा में पहले से कंपोज़ करते हैं. साथ ही, जब कोई आइटम स्क्रीन से हट जाता है, तो उसे हटा दिया जाता है. अब व्यूपोर्ट या डीपी साइज़ के कुछ हिस्से के हिसाब से, आइटम की संख्या को पसंद के मुताबिक सेट किया जा सकता है. इससे आपका ऐप्लिकेशन, फ़्रेम के बीच में रोके जा सकने वाले कंपोज़िशन को चालू करने के बाद, उपलब्ध समय का ज़्यादा असरदार तरीके से इस्तेमाल करके, पहले से ज़्यादा काम कर पाता है.

पसंद के मुताबिक़ कैश विंडो का इस्तेमाल शुरू करने के लिए, LazyLayoutCacheWindow को इंस्टैंटिएट करें और इसे अपनी लेज़ी लिस्ट या लेज़ी ग्रिड में पास करें. कैश विंडो के अलग-अलग साइज़ का इस्तेमाल करके, अपने ऐप्लिकेशन की परफ़ॉर्मेंस को मेज़र करें. उदाहरण के लिए, व्यूपोर्ट का 50%. सबसे सही वैल्यू, आपके कॉन्टेंट के स्ट्रक्चर और आइटम के साइज़ पर निर्भर करेगी.

val dpCacheWindow = LazyLayoutCacheWindow(ahead = 150.dp, behind = 100.dp)

val state = rememberLazyListState(cacheWindow = dpCacheWindow)

LazyColumn(state = state) {

    // column contents

}

रोके जा सकने वाले कंपोज़िशन

इस सुविधा की मदद से, कंपोज़िशन को रोका जा सकता है. साथ ही, उनके काम को कई फ़्रेम में बांटा जा सकता है. ये एपीआई 1.9 में उपलब्ध हुए थे. अब इनका इस्तेमाल, लेज़ी लेआउट प्रीफ़ेच में डिफ़ॉल्ट रूप से 1.10 में किया जाता है. आपको उन मुश्किल आइटम के लिए सबसे ज़्यादा फ़ायदा मिलेगा जिन्हें कंपोज़ करने में ज़्यादा समय लगता है. 

image.png

Compose की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने से जुड़ी ज़्यादा सुविधाएं

Compose के वर्शन 1.9 और 1.10 में, टीम ने कई ऐसे ऑप्टिमाइज़ेशन भी किए हैं जो थोड़े कम दिखते हैं.

कई ऐसे एपीआई को बेहतर बनाया गया है जो बैकग्राउंड में कोरूटीन का इस्तेमाल करते हैं. उदाहरण के लिए, Draggable और Clickable का इस्तेमाल करते समय, डेवलपर को तेज़ी से प्रतिक्रियाएं मिलनी चाहिए और बेहतर तरीके से संसाधन मिलने चाहिए.

लेआउट रेक्टैंगल ट्रैकिंग को ऑप्टिमाइज़ किया गया है. इससे onVisibilityChanged() और onLayoutRectChanged() जैसे मॉडिफ़ायर की परफ़ॉर्मेंस बेहतर हुई है. इससे लेआउट फ़ेज़ की प्रोसेस तेज़ हो जाती है. भले ही, इन एपीआई का इस्तेमाल न किया जा रहा हो.

परफ़ॉर्मेंस को बेहतर बनाने का एक और तरीका यह है कि onPlaced() के ज़रिए पोज़िशन देखते समय, कैश मेमोरी में सेव की गई वैल्यू का इस्तेमाल किया जाए.

बैकग्राउंड में टेक्स्ट को प्रीफ़ेच करना

Compose के वर्शन 1.9 से, बैकग्राउंड थ्रेड पर टेक्स्ट को प्रीफ़ेच करने की सुविधा जोड़ी गई है. इससे, कैश मेमोरी को पहले से तैयार किया जा सकता है, ताकि टेक्स्ट को तेज़ी से लेआउट किया जा सके. यह ऐप्लिकेशन रेंडरिंग की परफ़ॉर्मेंस के लिए ज़रूरी है. लेआउट के दौरान, टेक्स्ट को Android फ़्रेमवर्क में पास करना होता है. यहां शब्द का कैश मेमोरी डेटा सेव किया जाता है. डिफ़ॉल्ट रूप से, यह यूज़र इंटरफ़ेस (यूआई) थ्रेड पर चलता है. बैकग्राउंड थ्रेड पर प्रीफ़ेचिंग और शब्द कैश मेमोरी को पॉप्युलेट करने से, लेआउट को तेज़ी से लोड किया जा सकता है. खास तौर पर, लंबे टेक्स्ट के लिए. बैकग्राउंड थ्रेड पर प्रीफ़ेच करने के लिए, किसी भी कंपोज़ेबल को कस्टम एक्ज़ीक्यूटर पास किया जा सकता है. इसके लिए, BasicText का इस्तेमाल किया जा रहा हो. इसके लिए, LocalBackgroundTextMeasurementExecutor को CompositionLocalProvider में इस तरह पास करें.

val defaultTextMeasurementExecutor = Executors.newSingleThreadExecutor()

CompositionLocalProvider(

    LocalBackgroundTextMeasurementExecutor provides DefaultTextMeasurementExecutor

) {

    BasicText("Some text that should be measured on a background thread!")


}

टेक्स्ट के हिसाब से, इससे आपके टेक्स्ट रेंडरिंग की परफ़ॉर्मेंस बेहतर हो सकती है. यह पक्का करने के लिए कि इससे आपके ऐप्लिकेशन की रेंडरिंग परफ़ॉर्मेंस बेहतर हो, बेंचमार्क करें और नतीजों की तुलना करें.

बैकग्राउंड में काम करने की परफ़ॉर्मेंस से जुड़ी बातें

बैकग्राउंड में काम करने की सुविधा, कई ऐप्लिकेशन के लिए ज़रूरी होती है. ऐसा हो सकता है कि आपने WorkManager या JobScheduler जैसी लाइब्रेरी का इस्तेमाल किया हो. इनका इस्तेमाल इन कामों के लिए किया जाता है:

  • आंकड़ों से जुड़े इवेंट समय-समय पर अपलोड करना
  • बैकएंड सेवा और डेटाबेस के बीच डेटा सिंक करना
  • मीडिया को प्रोसेस करना (यानी, इमेज का साइज़ बदलना या उन्हें कंप्रेस करना)

इन टास्क को पूरा करते समय, परफ़ॉर्मेंस और पावर की खपत को बैलेंस करना एक बड़ी चुनौती होती है. WorkManager की मदद से, इस बैलेंस को हासिल किया जा सकता है. इसे कम बैटरी इस्तेमाल करने के लिए डिज़ाइन किया गया है. साथ ही, यह टास्क को सबसे सही समय पर पूरा करने की अनुमति देता है. यह समय कई बातों पर निर्भर करता है. जैसे, आपके तय किए गए या सिस्टम की ओर से लगाई गई पाबंदियां. 

हालांकि, WorkManager सभी मामलों में काम नहीं करता. Android में, बैटरी की खपत को कम करने वाले कई एपीआई भी मौजूद हैं. इन्हें खास तौर पर, कुछ सामान्य क्रिटिकल यूज़र जर्नी (सीयूजे) को ध्यान में रखकर डिज़ाइन किया गया है.  

इनमें से कुछ की सूची देखने के लिए,  बैकग्राउंड में किए जाने वाले काम का लैंडिंग पेज देखें. इसमें विजेट को अपडेट करना और बैकग्राउंड में जगह की जानकारी पाना शामिल है.

बैकग्राउंड में किए जाने वाले काम के लिए, लोकल डीबगिंग टूल: सामान्य स्थितियां

बैकग्राउंड में होने वाले काम को डीबग करने और यह समझने के लिए कि किसी टास्क में देरी क्यों हुई या वह पूरा क्यों नहीं हुआ, आपको यह पता होना चाहिए कि सिस्टम ने आपके टास्क को कैसे शेड्यूल किया है. 

इसके लिए, WorkManager में कई ऐसे टूल उपलब्ध हैं जो स्थानीय तौर पर डीबग करने और परफ़ॉर्मेंस को ऑप्टिमाइज़ करने में आपकी मदद करते हैं. इनमें से कुछ टूल, JobScheduler के लिए भी काम करते हैं! यहां कुछ सामान्य उदाहरण दिए गए हैं, जिनमें आपको WorkManager का इस्तेमाल करते समय समस्याओं का सामना करना पड़ सकता है. साथ ही, इन समस्याओं को ठीक करने के लिए इस्तेमाल किए जा सकने वाले टूल के बारे में भी बताया गया है.

शेड्यूल किए गए काम के पूरा न होने की वजह का पता लगाना

शेड्यूल किए गए काम में देरी होने या उसके पूरा न होने की कई वजहें हो सकती हैं. जैसे, तय की गई पाबंदियों का पालन न किया गया हो या सिस्टम ने पाबंदियां लगाई हों

शेड्यूल किया गया काम क्यों नहीं चल रहा है, इसकी जांच करने के लिए सबसे पहले यह पुष्टि करें कि काम को शेड्यूल किया गया था या नहीं.  शेड्यूल करने की स्थिति की पुष्टि करने के बाद, यह पता लगाएं कि क्या कोई ऐसी शर्त या ज़रूरी शर्तें हैं जिनकी वजह से काम पूरा नहीं हो पा रहा है.

इस स्थिति को डीबग करने के लिए कई टूल उपलब्ध हैं.

बैकग्राउंड टास्क की जांच करने वाला टूल

बैकग्राउंड टास्क की जांच करने वाला टूल, Android Studio में इंटिग्रेट किया गया एक बेहतरीन टूल है. यह WorkManager के सभी टास्क और उनसे जुड़ी स्थितियों (चल रहा है, लाइन में लगा है, पूरा नहीं हुआ, पूरा हो गया) को विज़ुअल तरीके से दिखाता है. 

शेड्यूल किया गया काम, बैकग्राउंड टास्क इंस्पेक्टर के साथ क्यों नहीं चल रहा है, यह जानने के लिए, काम की स्थिति देखें. 'लाइन में लगा हुआ' स्टेटस से पता चलता है कि आपका काम शेड्यूल किया गया था, लेकिन अब भी उसे शुरू होने का इंतज़ार है.

फ़ायदे: इस टूल की मदद से, सभी टास्क आसानी से देखे जा सकते हैं. साथ ही, अगर आपको एक के बाद एक कई टास्क पूरे करने हैं, तो यह टूल आपके लिए बहुत मददगार साबित होगा. बैकग्राउंड टास्क की जांच करने वाला टूल, ग्राफ़ व्यू दिखाता है. इससे यह पता चलता है कि क्या पिछले टास्क के पूरा न होने से, अगले टास्क के पूरा होने पर असर पड़ा है.

image.png

बैकग्राउंड टास्क की जांच करने वाले टूल का सूची वाला व्यू

image.png

बैकग्राउंड टास्क की जांच करने वाले टूल का ग्राफ़ व्यू

adb shell dumpsys jobscheduler

इस कमांड से, JobScheduler की सभी चालू नौकरियों की सूची मिलती है. इसमें WorkManager वर्कर, तय की गई पाबंदियां, और सिस्टम की ओर से लगाई गई पाबंदियां शामिल होती हैं. यह नौकरी का इतिहास भी दिखाता है. 

अगर आपको शेड्यूल किए गए काम और उससे जुड़ी पाबंदियों को किसी दूसरे तरीके से देखना है, तो इसका इस्तेमाल करें. WorkManager 2.10.0 से पहले के WorkManager वर्शन के लिए, adb shell dumpsys jobscheduler इस नाम के वर्कर की सूची दिखाएगा:

[package name]/androidx.work.impl.background.systemjob.SystemJobService

अगर आपके ऐप्लिकेशन में कई वर्कर हैं, तो WorkManager 2.10.0 पर अपडेट करने से, आपको वर्कर के नाम दिखेंगे. साथ ही, वर्कर के बीच आसानी से अंतर किया जा सकेगा:

#WorkerName#@[package name]/androidx.work.impl.background.systemjob.SystemJobService

फ़ायदे: इस कमांड से यह समझने में मदद मिलती है कि क्या सिस्टम की ओर से कोई पाबंदी लगाई गई थी. बैकग्राउंड टास्क इंस्पेक्टर से इसका पता नहीं लगाया जा सकता. उदाहरण के लिए, इससे आपके ऐप्लिकेशन का स्टैंडबाय बकेट वापस आ जाएगा. इससे शेड्यूल किए गए काम के पूरा होने की अवधि पर असर पड़ सकता है.

डीबग लॉगिंग की सुविधा चालू करना

WorkManager के ज़्यादा जानकारी वाले लॉग देखने के लिए, कस्टम लॉगिंग चालू करें. इसमें WM— अटैच होगा. 

फ़ायदे: इससे आपको यह जानकारी मिलती है कि काम कब शेड्यूल किया गया है, ज़रूरी शर्तें पूरी की गई हैं या नहीं, और लाइफ़साइकल इवेंट कब हुए. साथ ही, ऐप्लिकेशन डेवलप करते समय इन लॉग का इस्तेमाल किया जा सकता है.

WorkInfo.StopReason

अगर आपको किसी वर्कर की परफ़ॉर्मेंस में उतार-चढ़ाव दिखता है, तो प्रोग्राम के हिसाब से यह देखा जा सकता है कि पिछली बार वर्कर को क्यों रोका गया था. इसके लिए, WorkInfo.getStopReason का इस्तेमाल करें. 

अपने ऐप्लिकेशन को इस तरह कॉन्फ़िगर करना एक अच्छा तरीका है कि वह getWorkInfoByIdFlow का इस्तेमाल करके WorkInfo को मॉनिटर करे. इससे यह पता चलेगा कि बैकग्राउंड में काम करने से जुड़ी पाबंदियों, शर्तों, बार-बार टाइम आउट होने या उपयोगकर्ता के काम रोकने की वजह से, आपके काम पर असर पड़ रहा है या नहीं.

फ़ायदे: WorkInfo.StopReason का इस्तेमाल करके, अपने कर्मचारियों की परफ़ॉर्मेंस के बारे में फ़ील्ड डेटा इकट्ठा किया जा सकता है.

Android की ज़रूरी जानकारी की ओर से फ़्लैग किए गए, WorkManager की वजह से वेक लॉक की ज़्यादा अवधि को डीबग करना

Android की ज़रूरी जानकारी में, पार्शियल वेक लॉक का ज़्यादा इस्तेमाल होने की मेट्रिक शामिल होती है. इससे उन वेक लॉक के बारे में पता चलता है जिनकी वजह से बैटरी खत्म होती है. आपको यह जानकर हैरानी हो सकती है कि WorkManager, टास्क पूरे करने के लिए वेक लॉक हासिल करता है. अगर वेक लॉक, Google Play की ओर से तय की गई सीमा से ज़्यादा हो जाते हैं, तो इससे आपके ऐप्लिकेशन की विज़िबिलिटी पर असर पड़ सकता है. आप यह कैसे डीबग करेंगे कि आपके काम की वजह से, वेक लॉक की अवधि इतनी ज़्यादा क्यों है? इन टूल का इस्तेमाल किया जा सकता है.

Android की ज़रूरी जानकारी वाला डैशबोर्ड

सबसे पहले, Android की ज़रूरी जानकारी वाले, बहुत ज़्यादा वेक लॉक डैशबोर्ड में जाकर पुष्टि करें कि वेक लॉक की अवधि ज़्यादा है. यह भी पुष्टि करें कि यह अवधि, WorkManager की वजह से है, न कि अलार्म या किसी अन्य वेक लॉक की वजह से. अन्य एपीआई के बनाए गए वेक लॉक की पहचान करना दस्तावेज़ का इस्तेमाल करके, यह समझा जा सकता है कि WorkManager की वजह से कौनसे वेक लॉक होल्ड किए गए हैं. 

Perfetto

Perfetto, सिस्टम ट्रेस का विश्लेषण करने वाला टूल है. खास तौर पर, WorkManager को डीबग करने के लिए इसका इस्तेमाल करते समय, “डिवाइस की स्थिति” सेक्शन देखा जा सकता है. इससे यह पता चलता है कि आपका काम कब शुरू हुआ, यह कितनी देर तक चला, और इससे बैटरी की खपत कितनी हुई. 

“डिवाइस की स्थिति: जॉब” ट्रैक में जाकर,  उन सभी वर्कर को देखा जा सकता है जिन्हें लागू किया गया है. साथ ही, उनसे जुड़े वेक लॉक भी देखे जा सकते हैं.

deviceState.png

Perfetto में डिवाइस की स्थिति दिखाने वाला सेक्शन. इसमें CleanupWorker और BlurWorker के एक्ज़ीक्यूशन को दिखाया गया है.

संसाधन

आपको जिन अन्य स्थितियों का सामना करना पड़ सकता है उनके लिए, डीबग करने के उपलब्ध तरीकों की खास जानकारी पाने के लिए, WorkManager को डीबग करने वाला पेज देखें.

इनमें से कुछ तरीकों को आज़माने और WorkManager को डीबग करने के बारे में ज़्यादा जानने के लिए, WorkManager और टेस्टिंग के बारे में बेहतर जानकारी वाला कोडलैब देखें.

अगले चरण

आज हमने कोड को छोटा करने के अलावा, यह भी जाना कि Android Runtime और Jetpack Compose आपके ऐप्लिकेशन को कैसे रेंडर करते हैं. चाहे बेसलाइन प्रोफ़ाइलों की मदद से ज़रूरी पाथ को पहले से कंपाइल करना हो या Compose 1.9 और 1.10 की नई सुविधाओं की मदद से स्क्रोल की स्थितियों को बेहतर बनाना हो, ये टूल आपके ऐप्लिकेशन के अनुभव पर फ़ोकस करते हैं. साथ ही, हमने बैकग्राउंड में होने वाले काम को डीबग करने के सबसे सही तरीकों के बारे में भी जाना.

Android से पूछें

हम शुक्रवार को परफ़ॉर्मेंस के बारे में लाइव एएमए होस्ट कर रहे हैं. #AskAndroid का इस्तेमाल करके, अभी अपने सवाल पूछें और विशेषज्ञों से उनके जवाब पाएं.

चुनौती

हमने आपको सोमवार को R8 को चालू करने के लिए कहा था. हमारा अनुरोध है कि आज आप अपने ऐप्लिकेशन के लिए, एक बेसलाइन प्रोफ़ाइल जनरेट करें.

Android Studio Otter में, बेसलाइन प्रोफ़ाइल जनरेटर मॉड्यूल विज़र्ड की मदद से, इसे पहले से ज़्यादा आसान बना दिया गया है. उपयोगकर्ता की सबसे अहम यात्रा चुनें. भले ही, यह सिर्फ़ आपके ऐप्लिकेशन के स्टार्टअप और लॉगिन से जुड़ी हो. इसके बाद, एक प्रोफ़ाइल जनरेट करें.

इसके बाद, CompilationMode.None और CompilationMode.Partial की तुलना करने के लिए, Macrobenchmark चलाएं.

स्टार्टअप टाइम में हुए सुधारों को सोशल मीडिया पर शेयर करें. इसके लिए, #optimizationEnabled हैशटैग का इस्तेमाल करें.

कल ट्यून इन करें

आपने R8 की मदद से अपने ऐप्लिकेशन का साइज़ कम कर दिया है और प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन की मदद से रनटाइम को ऑप्टिमाइज़ कर दिया है. लेकिन, अपने स्टेकहोल्डर को इन उपलब्धियों के बारे में कैसे बताएं? साथ ही, प्रोडक्शन पर असर डालने से पहले रिग्रेशन का पता कैसे लगाया जाता है?

कल हमारे साथ जुड़ें. हम चौथे दिन: परफ़ॉर्मेंस लेवलिंग गाइड के बारे में बात करेंगे. इसमें हम आपको यह बताएंगे कि अपनी सफलता का आकलन कैसे करें. इसके लिए, हम Play Vitals में मौजूद फ़ील्ड डेटा से लेकर Perfetto की मदद से डीप लोकल ट्रेसिंग तक के बारे में जानकारी देंगे.

लेखक:
पढ़ना जारी रखें