راهنمای سطحبندی برای سفر عملکرد شما
به روز چهارم از هفتهی Performance Spotlight خوش آمدید. حالا که با برخی از ابزارهای فوقالعاده و بهترین شیوههایی که اخیراً معرفی کردهایم، مانندR8 Optimizer و Profile Guided Optimization with Baseline Profiles و Startup Profiles آشنا شدید، ممکن است از خود بپرسید که سفر بهبود عملکرد خود را از کجا شروع کنید.
ما یک راهنمای گام به گام برای تعیین سطح عملکرد ارائه دادهایم تا بتوانید با تیم توسعه موبایل خود در هر کجا که هستید، هماهنگ شوید - چه یک برنامه با یک توسعهدهنده باشید که به دنبال شروع کار با عملکرد است، و چه یک تیم کامل برای بهبود عملکرد اندروید داشته باشید.
راهنمای سطحبندی عملکرد شامل ۵ سطح است. ما با سطح ۱ شروع میکنیم که ابزارهای عملکرد با حداقل تلاش برای پذیرش را معرفی میکند و به سطح ۵ میرسیم که برای برنامههایی که منابع لازم برای حفظ یک چارچوب عملکرد سفارشی را دارند، ایدهآل است.
سطحی را که بیشتر با شما طنینانداز است، بررسی کنید:
سطح ۱: استفاده از نظارت میدانی ارائه شده توسط کنسول Play
توصیه میکنیم ابتدا از Android Vitals در Play Console برای مشاهده دادههای جمعآوریشده خودکار پایش میدانی استفاده کنید تا با کمترین تلاش، بینشی در مورد برنامه خود به دست آورید.
Android Vitals ابتکار گوگل برای جمعآوری و نمایش خودکار این دادههای میدانی برای شماست.
در اینجا توضیحی در مورد نحوه ارائه این دادهها ارائه میدهیم:
- جمعآوری دادهها: وقتی کاربری در این سیستم ثبت نام میکند، دستگاه اندروید او بهطور خودکار رویدادهای کلیدی عملکرد و پایداری را از همه برنامهها، از جمله برنامههای شما، ثبت میکند.
- دادههای تجمیعی: گوگل پلی این دادهها را از کاربران برنامه شما جمعآوری و ناشناس میکند.
- Surface Insights: دادهها در داشبورد Android Vitals در کنسول Google Play شما ارائه میشوند.
داشبورد Android Vitals معیارهای زیادی را ردیابی میکند، اما تعداد کمی از آنها به عنوان Core Vitals تعیین شدهاند. اینها مهمترین هستند زیرا میتوانند بر دیده شدن و رتبهبندی برنامه شما در فروشگاه Google Play تأثیر بگذارند.
عناصر حیاتی اصلی
معیارهای اصلی کیفیت فنی گوگل پلی برای به حداکثر رساندن دیده شدن در گوگل پلی، برنامه خود را زیر آستانه رفتار بد برای این معیارها نگه دارید. | |
| نرخ خرابی درک شده توسط کاربر | درصد کاربران فعال روزانه که حداقل یک خرابی قابل توجه را تجربه کردهاند |
| نرخ ANR درک شده توسط کاربر | درصد کاربران فعال روزانه که حداقل یک ANR قابل توجه را تجربه کردهاند |
| مصرف بیش از حد باتری | درصد جلسات استفاده از واچ فیس که در آنها مصرف باتری بیش از ۴.۴۴٪ در ساعت است |
| جدید: قفلهای بیداری جزئی بیش از حد | درصد جلسات کاربری که در آن مجموع استفاده از قفل بیداری (wake lock) بدون استثنا بیش از ۲ ساعت بوده است |
شاخصهای حیاتی اصلی شامل نرخ خرابی درک شده توسط کاربر، نرخ ANR، مصرف بیش از حد باتری و معیار تازه معرفی شده در مورد قفلهای بیداری جزئی بیش از حد است.
نرخ ANR ادراکشده توسط کاربر
شما میتوانید از داشبورد ANR مربوط به Android Vitals استفاده کنید تا ردپای پشتهای از مشکلاتی که در محل رخ میدهند را مشاهده کنید و بینشها و توصیههایی در مورد نحوه رفع مشکل دریافت کنید.

شما میتوانید به جزئیات یک ANR خاص که رخ داده است، بپردازید تا ردپای پشته و همچنین بینشهایی در مورد آنچه ممکن است باعث ایجاد مشکل شود، مشاهده کنید.

همچنین، راهنمای ANR ما را بررسی کنید تا به شما در تشخیص و رفع سناریوهای رایجی که ممکن است ANR در آنها رخ دهد، کمک کند.
نرخ خرابی درک شده توسط کاربر
برای اشکالزدایی بیشتر خرابیها و مشاهده نمونهای از ردگیریهای پشتهای که در برنامه شما رخ میدهد، از داشبورد خرابیهای Android Vitals استفاده کنید.
مستندات ما همچنین شامل راهنماییهایی در مورد عیبیابی خرابیهای خاص است. به عنوان مثال، راهنمای عیبیابی سرویسهای پیشزمینه، روشهای شناسایی و رفع سناریوهای رایجی را که در آنها خرابی رخ میدهد، مورد بحث قرار میدهد.
مصرف بیش از حد باتری
برای کاهش دفعات استفاده از واچ فیس در Wear OS که باعث مصرف بیش از حد باتری میشود، راهنمای Wear در مورد چگونگی بهبود و صرفهجویی در مصرف باتری را بررسی کنید.
[جدید] قفلهای بیداری جزئی بیش از حد
ما اخیراً اعلام کردیم که برنامههایی که از آستانهی قفل بیداری جزئی بیش از حد تجاوز میکنند، ممکن است از اول مارس ۲۰۲۶ با اقدامات بیشتری مواجه شوند.
برای دستگاههای تلفن همراه، معیار Android Vitals برای قفلهای بیداری بدون معافیت که در حین خاموش بودن صفحه نمایش و در حالی که برنامه در پسزمینه یا در حال اجرای یک سرویس پیشزمینه است، اعمال میشود. Android Vitals استفاده جزئی از قفل بیداری را بیش از حد در نظر میگیرد اگر قفلهای بیداری حداقل به مدت دو ساعت در یک دوره 24 ساعته نگه داشته شوند و بیش از 5٪ از جلسات برنامه شما را، به طور متوسط در 28 روز، تحت تأثیر قرار دهند.
برای اشکالزدایی و رفع مشکلات قفل بیداری بیش از حد، به پست وبلاگ فنی ما مراجعه کنید.
به مستندات Android Vitals ما مراجعه کنید و سفر خود را برای بهرهبرداری بهتر از Android Vitals ادامه دهید.
سطح ۲: موارد مربوط به امتیاز عملکرد برنامه را دنبال کنید
در مرحله بعد، با استفاده از امتیاز عملکرد برنامه، موارد عملی با قدرت نفوذ بالا را برای ارتقاء عملکرد برنامه خود پیدا کنید.
امتیاز عملکرد برنامه اندروید یک چارچوب استاندارد برای اندازهگیری عملکرد فنی برنامه شماست. این امتیاز بین 0 تا 100 به شما میدهد، که در آن عدد پایینتر نشاندهنده فضای بیشتر برای بهبود است.
برای اینکه بتوانید به راحتی برنده شوید، ابتدا باید با امتیاز عملکرد استاتیک شروع کنید. این امتیازها اغلب تغییرات پیکربندی یا بهروزرسانیهای ابزار هستند که افزایش عملکرد قابل توجهی را ارائه میدهند.
مرحله ۱: انجام ارزیابی استاتیک
ارزیابی استاتیک، پیکربندی و پذیرش ابزار پروژه شما را ارزیابی میکند. اینها اغلب سریعترین راهها برای بهبود عملکرد هستند.
به بخش امتیاز استاتیک در صفحه جدول امتیازات بروید و موارد زیر را انجام دهید:
- نسخه افزونه Gradle اندروید (AGP) را ارزیابی کنید.
- به تدریج از R8 Minification استفاده کنید یا در حالت ایدهآل، از R8 در حالت کامل برای کوچکسازی و بهینهسازی کد برنامه استفاده کنید.
- پروفایلهای پایه را اتخاذ کنید که سرعت اجرای کد را از اولین اجرا بهبود میبخشد و بهبود عملکرد را برای هر نصب برنامه جدید و هر بهروزرسانی برنامه ارائه میدهد.
- برای بهبود طرحبندی Dex، از پروفایلهای راهاندازی استفاده کنید. پروفایلهای راهاندازی توسط سیستم ساخت برای بهینهسازی بیشتر کلاسها و متدهای موجود در آنها استفاده میشوند و این کار را با بهبود طرحبندی کد در فایلهای DEX مربوط به APK شما انجام میدهند.
- به جدیدترین نسخه Jetpack Compose ارتقا دهید
مرحله ۲: انجام ارزیابی پویا
پس از اعمال روشهای ایستا و آسان برای موفقیت، از ارزیابی پویا برای اعتبارسنجی بهبودها در یک دستگاه واقعی استفاده کنید. ابتدا میتوانید این کار را به صورت دستی با یک دستگاه فیزیکی و یک کرونومتر انجام دهید.
به بخش امتیاز پویا در صفحه امتیازدهی بروید و موارد زیر را انجام دهید:
- محیط تست خود را با یک دستگاه فیزیکی راهاندازی کنید. استفاده از یک دستگاه رده پایین را برای بزرگنمایی مشکلات عملکرد در نظر بگیرید تا تشخیص آنها آسانتر شود.
- زمان شروع به کار را از طریق لانچر اندازهگیری کنید. برنامه خود را از طریق آیکون لانچر به صورت سرد اجرا کنید و زمان لازم برای شروع تعامل با برنامه را اندازهگیری کنید.
- زمان شروع برنامه را از یک اعلان اندازهگیری کنید، با هدف کاهش زمان شروع اعلان به کمتر از چند ثانیه.
- با پیمایش در صفحات اصلی و انیمیشنهای خود، عملکرد رندر را اندازهگیری کنید.
پس از تکمیل این مراحل، برای امتیازات ایستا و پویا، امتیازی بین ۱ تا ۱۰۰ دریافت خواهید کرد که به شما درکی از عملکرد برنامهتان و نقاطی که باید روی آنها تمرکز کنید، میدهد.
سطح ۳: استفاده از چارچوبهای تست عملکرد محلی
وقتی شروع به ارزیابی عملکرد پویا کردید، ممکن است اندازهگیری دستی عملکرد برایتان بسیار خستهکننده باشد. خودکارسازی تست عملکرد خود را با استفاده از چارچوبهای تست عملکرد مانند Macrobenchmarks و UiAutomator در نظر بگیرید.
ماکروبنچمارک 💚 رابط کاربری خودکار
Macrobenchmark و UiAutomator را به عنوان دو ابزاری که با هم کار میکنند در نظر بگیرید: Macrobenchmark ابزار اندازهگیری است. مانند یک کرونومتر و یک شمارنده نرخ فریم است که خارج از برنامه شما اجرا میشود. این ابزار مسئول شروع برنامه شما، ثبت معیارها (مانند زمان شروع یا فریمهای از دست رفته) و توقف برنامه است. UiAutomator کاربر ربات است. این کتابخانه به شما امکان میدهد کدی بنویسید تا با صفحه نمایش دستگاه تعامل داشته باشید. میتواند یک آیکون پیدا کند، روی یک دکمه ضربه بزند، در یک لیست پیمایش کند و موارد دیگر.
نحوه نوشتن تست
وقتی یک تست مینویسید، کد UiAutomator خود را درون یک بلوک Macrobenchmark قرار میدهید.
- تعریف آزمون: استفاده از
@MacrobenchmarkRule - شروع اندازهگیری: فراخوانی
benchmarkRule.measureRepeated. - رابط کاربری را هدایت کنید: درون آن بلوک، از کد UiAutomator برای راهاندازی برنامه خود، یافتن عناصر رابط کاربری و تعامل با آنها استفاده کنید.
در اینجا یک قطعه کد نمونه از نحوهی تست یک لیست نوشتن برای اسکرول کردن jank آورده شده است.
benchmarkRule.measureRepeated(
// ...
metrics = listOf(
FrameTimingMetric(),
),
startupMode = StartupMode.COLD,
iterations = 10,
) {
// 1. Launch the app's main activity
startApp()
// 2. Find the list using its resource ID and scroll down
onElement { viewIdResourceName == "$packageName.my_list" }
.fling(Direction.DOWN)
}۴. نتایج را بررسی کنید : هر اجرای آزمایشی، اطلاعات اندازهگیریشدهی دقیقی را در اختیار شما قرار میدهد تا بهترین دادهها را در مورد عملکرد برنامهتان در اختیار داشته باشید.
timeToInitialDisplayMs min 1894.4, median 2847.4, max 3355.6 frameOverrunMs P50 -3.2, P90 6.2, P95 10.4, P99 119.5
موارد استفاده رایج
Macrobenchmark چندین معیار اصلی را به صورت آماده ارائه میدهد. StartupTimingMetric به شما امکان میدهد تا زمان شروع به کار برنامه را به طور دقیق اندازهگیری کنید. FrameTimingMetric به شما امکان میدهد تا عملکرد رندرینگ یک برنامه را در طول آزمایش درک کنید.
ما یک راهنمای کامل و مفصل برای استفاده از Macrobenchmarks و UiAutomator به همراه نمونههای کد برای ادامه یادگیری شما داریم.
سطح ۴: از ابزارهای تحلیل ردیابی مانند Perfetto استفاده کنید
ابزارهای تحلیل ردیابی مانند Perfetto زمانی استفاده میشوند که نیاز دارید فراتر از کد برنامه خود را ببینید. برخلاف اشکالزداها یا پروفایلرهای استاندارد که فقط فرآیند شما را میبینند، Perfetto کل وضعیت دستگاه - زمانبندی هسته، فرکانس CPU، سایر فرآیندها و سرویسهای سیستم - را ثبت میکند و زمینه کاملی برای مشکلات عملکرد به شما میدهد.
برای دستورالعملهای ویدیویی در مورد اشکالزدایی عملکرد با استفاده از ردیابیهای سیستم، Android Studio Profiler و Perfetto، لیست پخش یوتیوب Performance Debugging ما را بررسی کنید.
نحوه استفاده از Perfeto برای اشکالزدایی عملکرد
گردش کار کلی برای اشکالزدایی عملکرد با استفاده از ابزارهای تحلیل ردیابی، ثبت، بارگذاری و تحلیل ردیابی است.
مرحله ۱: ثبت ردپا
شما میتوانید با استفاده از چندین روش، ردیابی سیستم را ثبت کنید:
- ضبط دستی ردپا روی دستگاه مستقیماً از طریق گزینههای توسعهدهنده .
- استفاده از ابزار پروفایل پردازنده اندروید استودیو
- استفاده از رابط کاربری Perfeto
مرحله ۲: بارگذاری مسیر
پس از تهیه فایل ردیابی، باید آن را در ابزار تحلیل بارگذاری کنید.
- کروم را باز کنید و به ui.perfetto.dev بروید.
- فایل
.perfetto-trace(یا.pftrace) خود را مستقیماً به پنجره مرورگر بکشید و رها کنید. - رابط کاربری فایل را پردازش کرده و جدول زمانی را نمایش میدهد.
مرحله ۳: تحلیل ردپا
شما میتوانید از Perfetto UI یا Android Studio Profiler برای بررسی مشکلات عملکرد استفاده کنید. این قسمت از مجموعه مهارتهای MAD در مورد عملکرد را ببینید، جایی که مهندس عملکرد ما، کارمن جکسون، در مورد ردیاب Perfetto صحبت میکند.
سناریوهایی برای بررسی ردپاهای سیستم با استفاده از Perfetto
Perfetto یک ابزار تخصصی است و میتواند اطلاعاتی در مورد هر اتفاقی که در دستگاه اندروید هنگام ثبت ردپا رخ داده است، ارائه دهد. این ابزار به ویژه زمانی مفید است که نمیتوانید علت اصلی کاهش سرعت را با استفاده از گزارشهای استاندارد یا پروفایلرهای اولیه شناسایی کنید.
اشکالزدایی Jank (فریمهای افتاده)
اگر برنامه شما هنگام پیمایش دچار مشکل میشود، Perfetto میتواند دقیقاً به شما نشان دهد که چرا یک فریم خاص مهلت خود را از دست داده است.
اگر به دلیل برنامه باشد، ممکن است ببینید که نخ اصلی شما برای مدت طولانی در حال انجام تجزیه و تحلیل سنگین است؛ این نشان دهنده سناریوهایی است که باید کار را به پردازش ناهمزمان منتقل کنید.
اگر مشکل از سیستم باشد، ممکن است نخ اصلی خود را آماده اجرا ببینید، اما زمانبند هسته CPU اولویت را به یک سرویس سیستمی دیگر داده و برنامه شما را در حالت انتظار قرار داده است (اختلال CPU). این نشان دهنده سناریوهایی است که ممکن است نیاز به بهینهسازی استفاده از APIهای پلتفرم داشته باشید.
تحلیل سرعت پایین شروع به کار اپلیکیشن
راهاندازی سیستم پیچیده است و شامل راهاندازی اولیه سیستم، انشعاب فرآیندها و بارگذاری منابع میشود. Perfetto این جدول زمانی را دقیقاً به تصویر میکشد.
میتوانید ببینید که آیا منتظر فراخوانیهای Binder (ارتباط بین فرآیندی) هستید یا خیر. اگر onCreate شما مدت زیادی منتظر پاسخی از PackageManager سیستم بماند، Perfetto آن حالت مسدود شده را به وضوح نشان میدهد.
همچنین میتوانید ببینید که آیا برنامه شما در طول راهاندازی برنامه، کار بیشتری نسبت به آنچه لازم است انجام میدهد یا خیر. برای مثال، اگر نماهای بیشتری نسبت به آنچه برنامه باید نشان دهد، ایجاد و طرحبندی میکنید، میتوانید این عملیات را در ردیابی مشاهده کنید.
بررسی تخلیه باتری و استفاده از CPU
از آنجا که پرفتو کل سیستم را میبیند، برای یافتن تخلیههای برق نامرئی عالی است.
میتوانید شناسایی کنید که کدام فرآیندها قفل بیداری دارند و از به خواب رفتن دستگاه در زیر مسیرهای «وضعیت دستگاه» جلوگیری میکنند. برای کسب اطلاعات بیشتر به پست وبلاگ قفلهای بیداری ما مراجعه کنید. همچنین، از Perfetto استفاده کنید تا ببینید آیا کارهای پسزمینه شما بیش از حد مکرر اجرا میشوند یا پردازنده را بیجهت بیدار میکنند یا خیر.
سطح ۵: چارچوب ردیابی عملکرد خودتان را بسازید
سطح آخر برای برنامههایی است که تیمهایی با منابع لازم برای حفظ چارچوب ردیابی عملکرد دارند.
ساخت یک چارچوب ردیابی عملکرد سفارشی در اندروید شامل استفاده از چندین API سیستم برای ثبت دادهها در طول چرخه عمر برنامه، از شروع تا خروج و در طول سناریوهای خاص با بار زیاد است.
با استفاده از ApplicationStartInfo ، ProfilingManager و ApplicationExitInfo ، میتوانید یک سیستم تلهمتری قوی ایجاد کنید که نحوه شروع برنامه، اطلاعات دقیقی از عملکرد آن در حین اجرا و دلیل از کار افتادن آن را گزارش دهد.
ApplicationStartInfo: ردیابی نحوه شروع برنامه
ApplicationStartInfo که از اندروید ۱۵ (API 35) در دسترس است، معیارهای دقیقی در مورد راهاندازی برنامه در این زمینه ارائه میدهد. این دادهها شامل این است که آیا شروع برنامه سرد، گرم یا داغ بوده است و مدت زمان مراحل مختلف راهاندازی چقدر بوده است.
این به شما کمک میکند تا با استفاده از دادههای تولید، یک معیار پایه برای شروع کار ایجاد کنید تا بتوانید آن را بیشتر بهینهسازی کنید، چیزی که ممکن است تولید مجدد آن به صورت محلی دشوار باشد. میتوانید از این معیارها برای اجرای تستهای A/B و بهینهسازی جریان شروع کار استفاده کنید.
هدف، ثبت دقیق معیارهای راهاندازی بدون اندازهگیری دستی هر مرحله راهاندازی است.
میتوانید مدتی پس از اجرای برنامه، این دادهها را به صورت تنبلی جستجو کنید.
ProfilingManager: فهمیدن دلیل کند بودن آن
ProfilingManager (API 35) به برنامه شما اجازه میدهد تا به صورت برنامهنویسی شده، ردیابیهای سیستمی را روی دستگاههای کاربر انجام دهد. این ابزار برای شناسایی مشکلات عملکردی گذرا در دنیای واقعی که نمیتوانید به صورت محلی آنها را ایجاد کنید، قدرتمند است.
هدف این است که وقتی یک مسیر کاربری بسیار حیاتی و خاص به کندی اجرا میشود یا با مشکلات عملکردی مواجه میشود، ردیابی به طور خودکار ثبت شود.
شما میتوانید یک شنونده (listener) ثبت کنید که در صورت برآورده شدن شرایط خاص فعال شود یا در صورت تشخیص مشکل عملکردی مانند لرزش، حافظه بیش از حد یا تخلیه باتری، آن را به صورت دستی فعال کنید.
مستندات ما را در مورد نحوه ثبت یک پروفایل ، بازیابی و تجزیه و تحلیل دادههای پروفایل و استفاده از دستورات اشکالزدایی بررسی کنید.
ApplicationExitInfo: پیگیری دلیل از کار افتادن برنامه
ApplicationExitInfo (API 30) به شما میگوید که چرا فرآیند قبلی شما از کار افتاده است. این برای یافتن خرابیهای بومی، ANRها یا از کار افتادنهای سیستم به دلیل استفاده بیش از حد از حافظه (OOM) بسیار مهم است. همچنین میتوانید با استفاده از API getTraceInputStream ، یک رد سنگ قبر دقیق دریافت کنید.
هدف این API درک مشکلات پایداری است که گزارشدهندههای استاندارد خرابی جاوا (مانند خطای Low Memory Kills) را فعال نمیکنند.
شما باید این API را فعال کنید راه اندازی برنامه بعدی.
مراحل بعدی
بهبود عملکرد اندروید یک سفر گام به گام است. ما بسیار هیجانزدهایم که ببینیم چگونه با استفاده از این ابزارها، عملکرد خود را ارتقا میدهید!
فردا منتظر Ask Android باشید
شما برنامه خود را با R8 کوچک کردهاید و زمان اجرا را با بهینهسازی هدایتشده توسط پروفایل بهینه کردهاید. و حالا عملکرد برنامه خود را اندازهگیری میکنید.
فردا در جلسه زنده «از اندروید بپرس» به ما بپیوندید. همین حالا با استفاده از هشتگ #AskAndroid سوالات خود را بپرسید و پاسخ آنها را از متخصصان دریافت کنید.
چگونههادر حالی که عملکرد برنامه اغلب با رابط کاربری روان و زمان شروع سریع برابر است، حافظه به عنوان پایه خاموشی عمل میکند که این معیارهای قابل مشاهده بر روی آن ساخته میشوند. بر کسی پوشیده نیست که ما شاهد تغییری هستیم که در آن حافظه دستگاه بیش از هر زمان دیگری اهمیت پیدا میکند.
چگونههابا توجه به اینکه تخلیه بیش از حد باتری برای کاربران اندروید از اهمیت بالایی برخوردار است، گوگل گامهای مهمی را برای کمک به توسعهدهندگان در ساخت برنامههای کممصرفتر برداشته است.
Alice Yuan • ۸ دقیقه مطالعه
چگونههاMedia3 1.11 منتشر شد. این نسخه که اکثر برنامههای برتر رسانهای اندروید را پشتیبانی میکند، ویژگیهای جدید، رفع اشکالات و بهبودهایی را در بخشهای پخش، ویرایش و اجزای رابط کاربری به همراه دارد.
Toni Heidenreich • 3 دقیقه خواندن
جدیدترین بینشهای توسعه اندروید را به صورت هفتگی در صندوق ورودی خود دریافت کنید.
راهنمای سطحبندی برای سفر عملکرد شما
به روز چهارم از هفتهی Performance Spotlight خوش آمدید. حالا که با برخی از ابزارهای فوقالعاده و بهترین شیوههایی که اخیراً معرفی کردهایم، مانندR8 Optimizer و Profile Guided Optimization with Baseline Profiles و Startup Profiles آشنا شدید، ممکن است از خود بپرسید که سفر بهبود عملکرد خود را از کجا شروع کنید.
ما یک راهنمای گام به گام برای تعیین سطح عملکرد ارائه دادهایم تا بتوانید با تیم توسعه موبایل خود در هر کجا که هستید، هماهنگ شوید - چه یک برنامه با یک توسعهدهنده باشید که به دنبال شروع کار با عملکرد است، و چه یک تیم کامل برای بهبود عملکرد اندروید داشته باشید.
راهنمای سطحبندی عملکرد شامل ۵ سطح است. ما با سطح ۱ شروع میکنیم که ابزارهای عملکرد با حداقل تلاش برای پذیرش را معرفی میکند و به سطح ۵ میرسیم که برای برنامههایی که منابع لازم برای حفظ یک چارچوب عملکرد سفارشی را دارند، ایدهآل است.
سطحی را که بیشتر با شما طنینانداز است، بررسی کنید:
سطح ۱: استفاده از نظارت میدانی ارائه شده توسط کنسول Play
توصیه میکنیم ابتدا از Android Vitals در Play Console برای مشاهده دادههای جمعآوریشده خودکار پایش میدانی استفاده کنید تا با کمترین تلاش، بینشی در مورد برنامه خود به دست آورید.
Android Vitals ابتکار گوگل برای جمعآوری و نمایش خودکار این دادههای میدانی برای شماست.
در اینجا توضیحی در مورد نحوه ارائه این دادهها ارائه میدهیم:
- جمعآوری دادهها: وقتی کاربری در این سیستم ثبت نام میکند، دستگاه اندروید او بهطور خودکار رویدادهای کلیدی عملکرد و پایداری را از همه برنامهها، از جمله برنامههای شما، ثبت میکند.
- دادههای تجمیعی: گوگل پلی این دادهها را از کاربران برنامه شما جمعآوری و ناشناس میکند.
- Surface Insights: دادهها در داشبورد Android Vitals در کنسول Google Play شما ارائه میشوند.
داشبورد Android Vitals معیارهای زیادی را ردیابی میکند، اما تعداد کمی از آنها به عنوان Core Vitals تعیین شدهاند. اینها مهمترین هستند زیرا میتوانند بر دیده شدن و رتبهبندی برنامه شما در فروشگاه Google Play تأثیر بگذارند.
عناصر حیاتی اصلی
معیارهای اصلی کیفیت فنی گوگل پلی برای به حداکثر رساندن دیده شدن در گوگل پلی، برنامه خود را زیر آستانه رفتار بد برای این معیارها نگه دارید. | |
| نرخ خرابی درک شده توسط کاربر | درصد کاربران فعال روزانه که حداقل یک خرابی قابل توجه را تجربه کردهاند |
| نرخ ANR درک شده توسط کاربر | درصد کاربران فعال روزانه که حداقل یک ANR قابل توجه را تجربه کردهاند |
| مصرف بیش از حد باتری | درصد جلسات استفاده از واچ فیس که در آنها مصرف باتری بیش از ۴.۴۴٪ در ساعت است |
| جدید: قفلهای بیداری جزئی بیش از حد | درصد جلسات کاربری که در آن مجموع استفاده از قفل بیداری (wake lock) بدون استثنا بیش از ۲ ساعت بوده است |
شاخصهای حیاتی اصلی شامل نرخ خرابی درک شده توسط کاربر، نرخ ANR، مصرف بیش از حد باتری و معیار تازه معرفی شده در مورد قفلهای بیداری جزئی بیش از حد است.
نرخ ANR ادراکشده توسط کاربر
شما میتوانید از داشبورد ANR مربوط به Android Vitals استفاده کنید تا ردپای پشتهای از مشکلاتی که در محل رخ میدهند را مشاهده کنید و بینشها و توصیههایی در مورد نحوه رفع مشکل دریافت کنید.

شما میتوانید به جزئیات یک ANR خاص که رخ داده است، بپردازید تا ردپای پشته و همچنین بینشهایی در مورد آنچه ممکن است باعث ایجاد مشکل شود، مشاهده کنید.

همچنین، راهنمای ANR ما را بررسی کنید تا به شما در تشخیص و رفع سناریوهای رایجی که ممکن است ANR در آنها رخ دهد، کمک کند.
نرخ خرابی درک شده توسط کاربر
برای اشکالزدایی بیشتر خرابیها و مشاهده نمونهای از ردگیریهای پشتهای که در برنامه شما رخ میدهد، از داشبورد خرابیهای Android Vitals استفاده کنید.
مستندات ما همچنین شامل راهنماییهایی در مورد عیبیابی خرابیهای خاص است. به عنوان مثال، راهنمای عیبیابی سرویسهای پیشزمینه، روشهای شناسایی و رفع سناریوهای رایجی را که در آنها خرابی رخ میدهد، مورد بحث قرار میدهد.
مصرف بیش از حد باتری
برای کاهش دفعات استفاده از واچ فیس در Wear OS که باعث مصرف بیش از حد باتری میشود، راهنمای Wear در مورد چگونگی بهبود و صرفهجویی در مصرف باتری را بررسی کنید.
[جدید] قفلهای بیداری جزئی بیش از حد
ما اخیراً اعلام کردیم که برنامههایی که از آستانهی قفل بیداری جزئی بیش از حد تجاوز میکنند، ممکن است از اول مارس ۲۰۲۶ با اقدامات بیشتری مواجه شوند.
برای دستگاههای تلفن همراه، معیار Android Vitals برای قفلهای بیداری بدون معافیت که در حین خاموش بودن صفحه نمایش و در حالی که برنامه در پسزمینه یا در حال اجرای یک سرویس پیشزمینه است، اعمال میشود. Android Vitals استفاده جزئی از قفل بیداری را بیش از حد در نظر میگیرد اگر قفلهای بیداری حداقل به مدت دو ساعت در یک دوره 24 ساعته نگه داشته شوند و بیش از 5٪ از جلسات برنامه شما را، به طور متوسط در 28 روز، تحت تأثیر قرار دهند.
برای اشکالزدایی و رفع مشکلات قفل بیداری بیش از حد، به پست وبلاگ فنی ما مراجعه کنید.
به مستندات Android Vitals ما مراجعه کنید و سفر خود را برای بهرهبرداری بهتر از Android Vitals ادامه دهید.
سطح ۲: موارد مربوط به امتیاز عملکرد برنامه را دنبال کنید
در مرحله بعد، با استفاده از امتیاز عملکرد برنامه، موارد عملی با قدرت نفوذ بالا را برای ارتقاء عملکرد برنامه خود پیدا کنید.
امتیاز عملکرد برنامه اندروید یک چارچوب استاندارد برای اندازهگیری عملکرد فنی برنامه شماست. این امتیاز بین 0 تا 100 به شما میدهد، که در آن عدد پایینتر نشاندهنده فضای بیشتر برای بهبود است.
برای اینکه بتوانید به راحتی برنده شوید، ابتدا باید با امتیاز عملکرد استاتیک شروع کنید. این امتیازها اغلب تغییرات پیکربندی یا بهروزرسانیهای ابزار هستند که افزایش عملکرد قابل توجهی را ارائه میدهند.
مرحله ۱: انجام ارزیابی استاتیک
ارزیابی استاتیک، پیکربندی و پذیرش ابزار پروژه شما را ارزیابی میکند. اینها اغلب سریعترین راهها برای بهبود عملکرد هستند.
به بخش امتیاز استاتیک در صفحه جدول امتیازات بروید و موارد زیر را انجام دهید:
- نسخه افزونه Gradle اندروید (AGP) را ارزیابی کنید.
- به تدریج از R8 Minification استفاده کنید یا در حالت ایدهآل، از R8 در حالت کامل برای کوچکسازی و بهینهسازی کد برنامه استفاده کنید.
- پروفایلهای پایه را اتخاذ کنید که سرعت اجرای کد را از اولین اجرا بهبود میبخشد و بهبود عملکرد را برای هر نصب برنامه جدید و هر بهروزرسانی برنامه ارائه میدهد.
- برای بهبود طرحبندی Dex، از پروفایلهای راهاندازی استفاده کنید. پروفایلهای راهاندازی توسط سیستم ساخت برای بهینهسازی بیشتر کلاسها و متدهای موجود در آنها استفاده میشوند و این کار را با بهبود طرحبندی کد در فایلهای DEX مربوط به APK شما انجام میدهند.
- به جدیدترین نسخه Jetpack Compose ارتقا دهید
مرحله ۲: انجام ارزیابی پویا
پس از اعمال روشهای ایستا و آسان برای موفقیت، از ارزیابی پویا برای اعتبارسنجی بهبودها در یک دستگاه واقعی استفاده کنید. ابتدا میتوانید این کار را به صورت دستی با یک دستگاه فیزیکی و یک کرونومتر انجام دهید.
به بخش امتیاز پویا در صفحه امتیازدهی بروید و موارد زیر را انجام دهید:
- محیط تست خود را با یک دستگاه فیزیکی راهاندازی کنید. استفاده از یک دستگاه رده پایین را برای بزرگنمایی مشکلات عملکرد در نظر بگیرید تا تشخیص آنها آسانتر شود.
- زمان شروع به کار را از طریق لانچر اندازهگیری کنید. برنامه خود را از طریق آیکون لانچر به صورت سرد اجرا کنید و زمان لازم برای شروع تعامل با برنامه را اندازهگیری کنید.
- زمان شروع برنامه را از یک اعلان اندازهگیری کنید، با هدف کاهش زمان شروع اعلان به کمتر از چند ثانیه.
- با پیمایش در صفحات اصلی و انیمیشنهای خود، عملکرد رندر را اندازهگیری کنید.
پس از تکمیل این مراحل، برای امتیازات ایستا و پویا، امتیازی بین ۱ تا ۱۰۰ دریافت خواهید کرد که به شما درکی از عملکرد برنامهتان و نقاطی که باید روی آنها تمرکز کنید، میدهد.
سطح ۳: استفاده از چارچوبهای تست عملکرد محلی
وقتی شروع به ارزیابی عملکرد پویا کردید، ممکن است اندازهگیری دستی عملکرد برایتان بسیار خستهکننده باشد. خودکارسازی تست عملکرد خود را با استفاده از چارچوبهای تست عملکرد مانند Macrobenchmarks و UiAutomator در نظر بگیرید.
ماکروبنچمارک 💚 رابط کاربری خودکار
Macrobenchmark و UiAutomator را به عنوان دو ابزاری که با هم کار میکنند در نظر بگیرید: Macrobenchmark ابزار اندازهگیری است. مانند یک کرونومتر و یک شمارنده نرخ فریم است که خارج از برنامه شما اجرا میشود. این ابزار مسئول شروع برنامه شما، ثبت معیارها (مانند زمان شروع یا فریمهای از دست رفته) و توقف برنامه است. UiAutomator کاربر ربات است. این کتابخانه به شما امکان میدهد کدی بنویسید تا با صفحه نمایش دستگاه تعامل داشته باشید. میتواند یک آیکون پیدا کند، روی یک دکمه ضربه بزند، در یک لیست پیمایش کند و موارد دیگر.
نحوه نوشتن تست
وقتی یک تست مینویسید، کد UiAutomator خود را درون یک بلوک Macrobenchmark قرار میدهید.
- تعریف آزمون: استفاده از
@MacrobenchmarkRule - شروع اندازهگیری: فراخوانی
benchmarkRule.measureRepeated. - رابط کاربری را هدایت کنید: درون آن بلوک، از کد UiAutomator برای راهاندازی برنامه خود، یافتن عناصر رابط کاربری و تعامل با آنها استفاده کنید.
در اینجا یک قطعه کد نمونه از نحوهی تست یک لیست نوشتن برای اسکرول کردن jank آورده شده است.
benchmarkRule.measureRepeated(
// ...
metrics = listOf(
FrameTimingMetric(),
),
startupMode = StartupMode.COLD,
iterations = 10,
) {
// 1. Launch the app's main activity
startApp()
// 2. Find the list using its resource ID and scroll down
onElement { viewIdResourceName == "$packageName.my_list" }
.fling(Direction.DOWN)
}۴. نتایج را بررسی کنید : هر اجرای آزمایشی، اطلاعات اندازهگیریشدهی دقیقی را در اختیار شما قرار میدهد تا بهترین دادهها را در مورد عملکرد برنامهتان در اختیار داشته باشید.
timeToInitialDisplayMs min 1894.4, median 2847.4, max 3355.6 frameOverrunMs P50 -3.2, P90 6.2, P95 10.4, P99 119.5
موارد استفاده رایج
Macrobenchmark چندین معیار اصلی را به صورت آماده ارائه میدهد. StartupTimingMetric به شما امکان میدهد تا زمان شروع به کار برنامه را به طور دقیق اندازهگیری کنید. FrameTimingMetric به شما امکان میدهد تا عملکرد رندرینگ یک برنامه را در طول آزمایش درک کنید.
ما یک راهنمای کامل و مفصل برای استفاده از Macrobenchmarks و UiAutomator به همراه نمونههای کد برای ادامه یادگیری شما داریم.
سطح ۴: از ابزارهای تحلیل ردیابی مانند Perfetto استفاده کنید
ابزارهای تحلیل ردیابی مانند Perfetto زمانی استفاده میشوند که نیاز دارید فراتر از کد برنامه خود را ببینید. برخلاف اشکالزداها یا پروفایلرهای استاندارد که فقط فرآیند شما را میبینند، Perfetto کل وضعیت دستگاه - زمانبندی هسته، فرکانس CPU، سایر فرآیندها و سرویسهای سیستم - را ثبت میکند و زمینه کاملی برای مشکلات عملکرد به شما میدهد.
برای دستورالعملهای ویدیویی در مورد اشکالزدایی عملکرد با استفاده از ردیابیهای سیستم، Android Studio Profiler و Perfetto، لیست پخش یوتیوب Performance Debugging ما را بررسی کنید.
نحوه استفاده از Perfeto برای اشکالزدایی عملکرد
گردش کار کلی برای اشکالزدایی عملکرد با استفاده از ابزارهای تحلیل ردیابی، ثبت، بارگذاری و تحلیل ردیابی است.
مرحله ۱: ثبت ردپا
شما میتوانید با استفاده از چندین روش، ردیابی سیستم را ثبت کنید:
- ضبط دستی ردپا روی دستگاه مستقیماً از طریق گزینههای توسعهدهنده .
- استفاده از ابزار پروفایل پردازنده اندروید استودیو
- استفاده از رابط کاربری Perfeto
مرحله ۲: بارگذاری مسیر
پس از تهیه فایل ردیابی، باید آن را در ابزار تحلیل بارگذاری کنید.
- کروم را باز کنید و به ui.perfetto.dev بروید.
- فایل
.perfetto-trace(یا.pftrace) خود را مستقیماً به پنجره مرورگر بکشید و رها کنید. - رابط کاربری فایل را پردازش کرده و جدول زمانی را نمایش میدهد.
مرحله ۳: تحلیل ردپا
شما میتوانید از Perfetto UI یا Android Studio Profiler برای بررسی مشکلات عملکرد استفاده کنید. این قسمت از مجموعه مهارتهای MAD در مورد عملکرد را ببینید، جایی که مهندس عملکرد ما، کارمن جکسون، در مورد ردیاب Perfetto صحبت میکند.
سناریوهایی برای بررسی ردپاهای سیستم با استفاده از Perfetto
Perfetto یک ابزار تخصصی است و میتواند اطلاعاتی در مورد هر اتفاقی که در دستگاه اندروید هنگام ثبت ردپا رخ داده است، ارائه دهد. این ابزار به ویژه زمانی مفید است که نمیتوانید علت اصلی کاهش سرعت را با استفاده از گزارشهای استاندارد یا پروفایلرهای اولیه شناسایی کنید.
اشکالزدایی Jank (فریمهای افتاده)
اگر برنامه شما هنگام پیمایش دچار مشکل میشود، Perfetto میتواند دقیقاً به شما نشان دهد که چرا یک فریم خاص مهلت خود را از دست داده است.
اگر به دلیل برنامه باشد، ممکن است ببینید که نخ اصلی شما برای مدت طولانی در حال انجام تجزیه و تحلیل سنگین است؛ این نشان دهنده سناریوهایی است که باید کار را به پردازش ناهمزمان منتقل کنید.
اگر مشکل از سیستم باشد، ممکن است نخ اصلی خود را آماده اجرا ببینید، اما زمانبند هسته CPU اولویت را به یک سرویس سیستمی دیگر داده و برنامه شما را در حالت انتظار قرار داده است (اختلال CPU). این نشان دهنده سناریوهایی است که ممکن است نیاز به بهینهسازی استفاده از APIهای پلتفرم داشته باشید.
تحلیل سرعت پایین شروع به کار اپلیکیشن
راهاندازی سیستم پیچیده است و شامل راهاندازی اولیه سیستم، انشعاب فرآیندها و بارگذاری منابع میشود. Perfetto این جدول زمانی را دقیقاً به تصویر میکشد.
میتوانید ببینید که آیا منتظر فراخوانیهای Binder (ارتباط بین فرآیندی) هستید یا خیر. اگر onCreate شما مدت زیادی منتظر پاسخی از PackageManager سیستم بماند، Perfetto آن حالت مسدود شده را به وضوح نشان میدهد.
همچنین میتوانید ببینید که آیا برنامه شما در طول راهاندازی برنامه، کار بیشتری نسبت به آنچه لازم است انجام میدهد یا خیر. برای مثال، اگر نماهای بیشتری نسبت به آنچه برنامه باید نشان دهد، ایجاد و طرحبندی میکنید، میتوانید این عملیات را در ردیابی مشاهده کنید.
بررسی تخلیه باتری و استفاده از CPU
از آنجا که پرفتو کل سیستم را میبیند، برای یافتن تخلیههای برق نامرئی عالی است.
میتوانید شناسایی کنید که کدام فرآیندها قفل بیداری دارند و از به خواب رفتن دستگاه در زیر مسیرهای «وضعیت دستگاه» جلوگیری میکنند. برای کسب اطلاعات بیشتر به پست وبلاگ قفلهای بیداری ما مراجعه کنید. همچنین، از Perfetto استفاده کنید تا ببینید آیا کارهای پسزمینه شما بیش از حد مکرر اجرا میشوند یا پردازنده را بیجهت بیدار میکنند یا خیر.
سطح ۵: چارچوب ردیابی عملکرد خودتان را بسازید
سطح آخر برای برنامههایی است که تیمهایی با منابع لازم برای حفظ چارچوب ردیابی عملکرد دارند.
ساخت یک چارچوب ردیابی عملکرد سفارشی در اندروید شامل استفاده از چندین API سیستم برای ثبت دادهها در طول چرخه عمر برنامه، از شروع تا خروج، و در طول سناریوهای خاص با بار زیاد است.
با استفاده از ApplicationStartInfo ، ProfilingManager و ApplicationExitInfo ، میتوانید یک سیستم تلهمتری قوی ایجاد کنید که نحوه شروع برنامه، اطلاعات دقیقی از عملکرد آن در حین اجرا و دلیل از کار افتادن آن را گزارش دهد.
ApplicationStartInfo: ردیابی نحوه شروع برنامه
ApplicationStartInfo که از اندروید ۱۵ (API 35) در دسترس است، معیارهای دقیقی در مورد راهاندازی برنامه در این زمینه ارائه میدهد. این دادهها شامل این است که آیا شروع برنامه سرد، گرم یا داغ بوده است و مدت زمان مراحل مختلف راهاندازی چقدر بوده است.
این به شما کمک میکند تا با استفاده از دادههای تولید، یک معیار پایه برای شروع کار ایجاد کنید تا بتوانید آن را بیشتر بهینهسازی کنید، چیزی که ممکن است تولید مجدد آن به صورت محلی دشوار باشد. میتوانید از این معیارها برای اجرای تستهای A/B و بهینهسازی جریان شروع کار استفاده کنید.
هدف، ثبت دقیق معیارهای راهاندازی بدون اندازهگیری دستی هر مرحله راهاندازی است.
میتوانید مدتی پس از اجرای برنامه، این دادهها را به صورت تنبلی جستجو کنید.
ProfilingManager: فهمیدن دلیل کند بودن آن
ProfilingManager (API 35) به برنامه شما اجازه میدهد تا به صورت برنامهنویسی شده، ردیابیهای سیستمی را روی دستگاههای کاربر انجام دهد. این ابزار برای شناسایی مشکلات عملکردی گذرا در دنیای واقعی که نمیتوانید به صورت محلی آنها را ایجاد کنید، قدرتمند است.
هدف این است که وقتی یک مسیر کاربری بسیار حیاتی و خاص به کندی اجرا میشود یا با مشکلات عملکردی مواجه میشود، ردیابی به طور خودکار ثبت شود.
شما میتوانید یک شنونده (listener) ثبت کنید که در صورت برآورده شدن شرایط خاص فعال شود یا در صورت تشخیص مشکل عملکردی مانند لرزش، حافظه بیش از حد یا تخلیه باتری، آن را به صورت دستی فعال کنید.
مستندات ما را در مورد نحوه ثبت یک پروفایل ، بازیابی و تجزیه و تحلیل دادههای پروفایل و استفاده از دستورات اشکالزدایی بررسی کنید.
ApplicationExitInfo: پیگیری دلیل از کار افتادن برنامه
ApplicationExitInfo (API 30) به شما میگوید که چرا فرآیند قبلی شما از کار افتاده است. این برای یافتن خرابیهای بومی، ANRها یا از کار افتادنهای سیستم به دلیل استفاده بیش از حد از حافظه (OOM) بسیار مهم است. همچنین میتوانید با استفاده از API getTraceInputStream ، یک رد سنگ قبر دقیق دریافت کنید.
هدف این API درک مشکلات پایداری است که گزارشدهندههای استاندارد خرابی جاوا (مانند خطای Low Memory Kills) را فعال نمیکنند.
شما باید این API را فعال کنید راه اندازی برنامه بعدی.
مراحل بعدی
بهبود عملکرد اندروید یک سفر گام به گام است. ما بسیار هیجانزدهایم که ببینیم چگونه با استفاده از این ابزارها، عملکرد خود را ارتقا میدهید!
فردا منتظر Ask Android باشید
You have shrunk your app with R8 and optimized your runtime with Profile Guided Optimization. And measure your app's performance.
Join us tomorrow for the live Ask Android session. Ask your questions now using #AskAndroid and get them answered by the experts.
How-tosWhile app performance is often equated with a smooth UI and fast start times, memory serves as the silent foundation upon which these visible metrics are built. It's no secret that we're seeing a shift where device memory is more important than ever.
Alice Yuan , Ajesh Pai , Fung Lam • 10 min read
How-tosIn recognition that excessive battery drain is top of mind for Android users, Google has been taking significant steps to help developers build more power-efficient apps.
Alice Yuan • 8 min read
How-tosMedia3 1.11 is out. Powering the vast majority of top Android media apps, this release brings new features, bug fixes, and improvements across playback, editing, and UI components.
Toni Heidenreich • 3 min read
Get the latest Android development insights delivered to your inbox weekly.
Leveling Guide for your Performance Journey
Welcome to day 4 of Performance Spotlight Week. Now that you've learned about some of the awesome tools and best practices we've introduced recently such as theR8 Optimizer , and Profile Guided Optimization with Baseline Profiles and Startup Profiles , you might be wondering where to start your performance improvement journey.
We've come up with a step-by-step performance leveling guide to meet your mobile development team where you are—whether you're an app with a single developer looking to get started with performance, or you have an entire team dedicated to improving Android performance.
The performance leveling guide features 5 levels. We'll start with level 1, which introduces minimal adoption effort performance tooling, and we'll go up to level 5, ideal for apps that have the resourcing to maintain a bespoke performance framework.
Explore the level that resonates most with you:
Level 1: Use Play Console provided field monitoring
We recommend first leveraging Android vitals within the Play Console for viewing automatically collected field monitoring data, giving you insights about your application with minimal effort.
Android vitals is Google's initiative to automatically collect and surface this field data for you.
Here's an explanation of how we deliver this data:
- Collect Data: When a user opts-in, their Android device automatically logs key performance and stability events from all apps, including yours.
- Aggregate Data: Google Play collects and anonymizes this data from your app's users.
- Surface Insights: The data is presented to you in the Android vitals dashboard within your Google Play Console.
The Android vitals dashboard tracks many metrics, but a few are designated as Core Vitals . These are the most important because they can affect your app's visibility and ranking on the Google Play Store.
The Core Vitals
GOOGLE PLAY'S CORE TECHNICAL QUALITY METRICS To maximize visibility on Google Play, keep your app below the bad behavior thresholds for these metrics. | |
| User-perceived crash rate | The percentage of daily active users who experienced at least one crash that is likely to have been noticeable |
| User-perceived ANR rate | The percentage of daily active users who experienced at least one ANR that is likely to have been noticeable |
| Excessive battery usage | The percentage of watch face sessions where battery usage exceeds 4.44% per hour |
| New: Excessive partial wake locks | The percentage of user sessions where cumulative, non-exempt wake lock usage exceeds 2 hours |
The core vitals include user-perceived crash rate, ANR rate, excessive battery usage and the newly introduced metric on excessive partial wake locks.
User-Perceived ANR Rate
You can use the Android Vitals ANR dashboard , to see stack traces of issues that occur in the field and get insights and recommendations on how to fix the issue.

You can drill down into a specific ANR that occurred, to see the stack trace as well as insights on what might be causing the issue.

Also, check out our ANR guidance to help you diagnose and fix the common scenarios where ANRs might occur.
User-Perceived Crash Rate
Use the Android vitals crash dashboard to further debug crashes and view a sample of stack traces that occur within your app.
Our documentation also has guidance around troubleshooting specific crashes. For example, the Troubleshoot foreground services guide discusses ways to identify and fix common scenarios where crashes occur.
Excessive Battery Usage
To decrease watch face sessions with excessive battery usage on Wear OS, check out the Wear guide on how to improve and conserve battery .
[new] Excessive Partial Wake Locks
We recently announced that apps that exceed the excessive partial wake locks threshold may see additional treatment starting on March 1st 2026 .
For mobile devices, the Android vitals metric applies to non-exempted wake locks acquired while the screen is off and the app is in the background or running a foreground service. Android vitals considers partial wake lock usage excessive if wake locks are held for at least two hours within a 24-hour period and it affects more than 5% of your app's sessions, averaged over 28 days.
To debug and fix excessive wake lock issues, check out our technical blog post .
Consult our Android vitals documentation and continue your journey to better leverage Android vitals.
Level 2: Follow the App Performance Score action items
Next, move onto using the App Performance Score to find the high leverage action items to uplevel your app performance.
The Android App Performance Score is a standardized framework to measure your app's technical performance. It gives you a score between 0 and 100, where a lower number indicates more room for improvement.
To get easy wins, you should first start with the Static Performance Score first. These are often configuration changes or tooling updates that provide significant performance boosts.
Step 1: Perform the Static Assessment
The static assessment evaluates your project's configuration and tooling adoption. These are often the quickest ways to improve performance.
Navigate to the Static Score section of the scoreboard page and do the following:
- Assess Android Gradle Plugin (AGP) Version.
- Adopt R8 Minification incrementally or ideally, use R8 in full mode to minify and optimize the app code.
- Adopt Baseline Profiles which improves code execution speed from the first launch providing performance enhancements for every new app install and every app update.
- Adopt Startup Profiles to improve Dex Layout. Startup Profiles are used by the build system to further optimize the classes and methods they contain by improving the layout of code in your APK's DEX files.
- Upgrade to the newest version of Jetpack Compose
Step 2: Perform the Dynamic Assessment
Once you have applied the static easy wins, use the dynamic assessment to validate the improvements on a real device. You can first do this manually with a physical device and a stop watch.
Navigate to the Dynamic Score section of the scoreboard page and do the following:
- Set up your test environment with a physical device. Consider using a lower-end device to exaggerate performance issues, making them easier to spot.
- Measure startup time from the launcher. Cold start your app from the launcher icon and measure the time until it is interactive.
- Measure app startup time from a notification, with the goal to reduce notification startup time to be below a couple seconds.
- Measure rendering performance by scrolling through your core screens and animations.
Once you've completed these steps, you will receive a score between 1 - 100 for the static and dynamic scores, giving you an understanding of your app's performance and where to focus on.
Level 3: Leverage local performance test frameworks
Once you've started to assess dynamic performance, you may find it too tedious to measure performance manually. Consider automating your performance testing using performance test frameworks such as Macrobenchmarks and UiAutomator.
Macrobenchmark 💚 UiAutomator
Think of Macrobenchmark and UiAutomator as two tools that work together: Macrobenchmark is the measurement tool. It's like a stopwatch and a frame-rate counter that runs outside your app. It is responsible for starting your app, recording metrics (like startup time or dropped frames), and stopping the app. UiAutomator is the robot user. The library lets you write code to interact with the device's screen. It can find an icon, tap a button, scroll on a list and more.
How to write a test
When you write a test, you wrap your UiAutomator code inside a Macrobenchmark block.
- Define the Test: Use the
@MacrobenchmarkRule - Start Measuring: Call
benchmarkRule.measureRepeated. - Drive the UI: Inside that block, use UiAutomator code to launch your app, find UI elements, and interact with them.
Here's an example code snippet of what it looks like to test a compose list for scrolling jank.
benchmarkRule.measureRepeated(
// ...
metrics = listOf(
FrameTimingMetric(),
),
startupMode = StartupMode.COLD,
iterations = 10,
) {
// 1. Launch the app's main activity
startApp()
// 2. Find the list using its resource ID and scroll down
onElement { viewIdResourceName == "$packageName.my_list" }
.fling(Direction.DOWN)
}4. Review the results : Each test run provides you with precisely measured information to give you the best data on your app's performance.
timeToInitialDisplayMs min 1894.4, median 2847.4, max 3355.6 frameOverrunMs P50 -3.2, P90 6.2, P95 10.4, P99 119.5
موارد استفاده رایج
Macrobenchmark provides several core metrics out of the box. StartupTimingMetric allows you to accurately measure app startup. The FrameTimingMetric enables you to understand an app's rendering performance during the test.
We have a detailed and complete guide to using Macrobenchmarks and UiAutomator alongside code samples available for you to continue learning.
Level 4: Use trace analysis tools like Perfetto
Trace analysis tools like Perfetto are used when you need to see beyond your own application code. Unlike standard debuggers or profilers that only see your process, Perfetto captures the entire device state—kernel scheduling, CPU frequency, other processes, and system services—giving you complete context for performance issues.
Check our Performance Debugging youtube playlist for video instructions on performance debugging using system traces, Android Studio Profiler and Perfetto.
How to use Perfetto to debug performance
The general workflow for debugging performance using trace analysis tools is to record, load and analyze the trace.
Step 1: Record a trace
You can record a system trace using several methods:
- Recording a trace manually on the device directly from the developer options .
- Using the Android Studio CPU Profiler
- Using the Perfetto UI
Step 2: Load the trace
Once you have the trace file, you need to load it into the analysis tool.
- Open Chrome and navigate to ui.perfetto.dev .
- Drag and drop your
.perfetto-trace(or.pftrace) file directly into the browser window. - The UI will process the file and display the timeline.
Step 3: Analyze the trace
You can use Perfetto UI or Android Studio Profiler to investigate performance issues. Check out this episode of the MAD Skills series on Performance, where our performance engineer Carmen Jackson discusses the Perfetto traceviewer.
Scenarios for inspecting system traces using Perfetto
Perfetto is an expert tool and can provide information about everything that happened on the Android device while a trace was captured. This is particularly helpful when you cannot identify the root cause of a slowdown using standard logs or basic profilers.
Debugging Jank (Dropped Frames)
If your app stutters while scrolling, Perfetto can show you exactly why a specific frame missed its deadline.
If it's due to the app, you might see your main thread running for a long duration doing heavy parsing; this indicates scenarios where you should move the work into asynchronous processing.
If it's due to the system, you might see your main thread ready to run, but the CPU kernel scheduler gave priority to a different system service, leaving your app waiting (CPU contention). This indicates scenarios where you may need to optimize usage of platform APIs.
Analyzing Slow App Startup
Startup is complex, involving system init, process forking, and resource loading. Perfetto visualizes this timeline precisely.
You can see if you are waiting on Binder calls (inter-process communication). If your onCreate waits a long time for a response from the system PackageManager , Perfetto will show that blocked state clearly.
You can also see if your app is doing more work than necessary during the app startup. For example, if you are creating and laying out more views than the app needs to show, you can see these operations in the trace.
Investigating Battery Drain & CPU Usage
Because Perfetto sees the whole system, it's perfect for finding invisible power drains.
You can identify which processes are holding wake locks, preventing the device from sleeping under the “Device State” tracks. Learn more in our wake locks blog post . Also, use Perfetto to see if your background jobs are running too frequently or waking up the CPU unnecessarily.
Level 5: Build your own performance tracking framework
The final level is for apps that have teams with resourcing to maintain a performance tracking framework.
Building a custom performance tracking framework on Android involves leveraging several system APIs to capture data throughout the application lifecycle, from startup to exit, and during specific high-load scenarios.
By using ApplicationStartInfo , ProfilingManager , and ApplicationExitInfo , you can create a robust telemetry system that reports on how your app started, detailed info on what it did while running, and why it died.
ApplicationStartInfo: Tracking how the app started
Available from Android 15 (API 35), ApplicationStartInfo provides detailed metrics about app startup in the field. The data includes whether it was a cold, warm, or hot start, and the duration of different startup phases.
This helps you develop a baseline startup metric using production data to further optimize that might be hard to reproduce locally. You can use these metrics to run A/B tests optimizing the startup flow.
The goal is to accurately record launch metrics without manually instrumenting every initialization phase.
You can query this data lazily some time after application launch.
ProfilingManager: Capturing why it was slow
ProfilingManager (API 35) allows your app to programmatically trigger system traces on user devices. This is powerful for catching transient performance issues in the wild that you can't reproduce locally.
The goal is to automatically record a trace when a specific highly critical user journey is detected as running slowly or experiencing performance issues.
You can register a listener that triggers when specific conditions are met or trigger it manually when you detect a performance issue such as jank, excessive memory, or battery drain.
Check our documentation on how to capture a profile , retrieve and analyze profiling data and use debug commands.
ApplicationExitInfo: Tracking why the app died
ApplicationExitInfo (API 30) tells you why your previous process died. This is crucial for finding native crashes, ANRs, or system kills due to excessive memory usage (OOM). You'll also be able to get a detailed tombstone trace by using the API getTraceInputStream .
The goal of the API is to understand stability issues that don't trigger standard Java crash reporters (like Low Memory Kills).
You should trigger this API on the next app launch.
مراحل بعدی
Improving Android performance is a step-by-step journey. We're so excited to see how you level up your performance using these tools!
Tune in tomorrow for Ask Android
You have shrunk your app with R8 and optimized your runtime with Profile Guided Optimization. And measure your app's performance.
Join us tomorrow for the live Ask Android session. Ask your questions now using #AskAndroid and get them answered by the experts.
How-tosWhile app performance is often equated with a smooth UI and fast start times, memory serves as the silent foundation upon which these visible metrics are built. It's no secret that we're seeing a shift where device memory is more important than ever.
Alice Yuan , Ajesh Pai , Fung Lam • 10 min read
How-tosIn recognition that excessive battery drain is top of mind for Android users, Google has been taking significant steps to help developers build more power-efficient apps.
Alice Yuan • 8 min read
How-tosMedia3 1.11 is out. Powering the vast majority of top Android media apps, this release brings new features, bug fixes, and improvements across playback, editing, and UI components.
Toni Heidenreich • 3 min read
Get the latest Android development insights delivered to your inbox weekly.



