برنامه اندروید خود را بر اساس برچسب های ANR در داشبورد Crashlytics اشکال زدایی کنید

خطاهای عدم پاسخگویی برنامه (ANR) زمانی رخ می‌دهند که رابط کاربری (UI thread) برنامه بیش از 5 ثانیه پاسخ ندهد. می‌توانید اطلاعات بیشتر در مورد ANRها و تشخیص ANRها را در مستندات اندروید مطالعه کنید.

علاوه بر این، Crashlytics می‌تواند به شناسایی دقیق رشته‌های مشکل‌ساز خاص کمک کند. ما ANRها را تجزیه و تحلیل می‌کنیم و سپس، در داشبورد Crashlytics ، رشته‌های مربوطه را برچسب‌گذاری می‌کنیم تا نکاتی در مورد نحوه اشکال‌زدایی ANR ارائه دهیم.

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

Triggered ANR

یک رشته که برای مدت طولانی مسدود شده و باعث ایجاد ANR شده است، با این علامت‌گذاری می‌شود. برچسب Triggered ANR .

تاپیک مشکل‌دار می‌تواند تاپیک اصلی برنامه یا هر تاپیکی باشد که پاسخگو نباشد. با این حال، تاپیک با برچسب Triggered ANR ممکن است علت اصلی ANR باشد یا نباشد. برای ارائه بینش‌هایی برای اشکال‌زدایی و رفع این ANRها، Crashlytics سایر رشته‌هایی را که در ANR دخیل هستند نیز برچسب‌گذاری می‌کند. در بخش‌های بعدی این صفحه، درباره سایر برچسب‌هایی که می‌توانند برای یک رشته اعمال شوند، اطلاعات کسب کنید.

Deadlocked

هر رشته‌ای که مشخص شود در بن‌بستی که منجر به ANR شده است، دخیل بوده است، با این حاشیه‌نویسی می‌شود تگ Deadlocked .

بن‌بست زمانی رخ می‌دهد که یک نخ به دلیل در اختیار داشتن منبع مورد نیاز توسط نخ دیگری که آن هم منتظر منبعی است که توسط نخ اول در اختیار دارد، وارد حالت انتظار شود. اگر نخ اصلی برنامه در این وضعیت باشد، احتمال وقوع ANR وجود دارد.

توصیه

به رشته‌های درگیر در بن‌بست نگاه کنید و منابع/قفل‌های به‌دست‌آمده توسط آن رشته‌ها را بررسی کنید. برای راه‌حل‌های ممکن به بن‌بست و الگوریتم‌های پیشگیری از بن‌بست مراجعه کنید.

IO Root blocking

هر نخی که عملیات ورودی/خروجی کندی را اجرا می‌کرد و آن را مسدود می‌کرد رشته Triggered ANR با موارد زیر حاشیه‌نویسی می‌شود: تگ IO Root blocking . اگر رشته‌ی Triggered ANR توسط رشته‌های دیگر مسدود نشده باشد، پس نخ IO Root blocking نیز یک ... است. نخ Root blocking .

توصیه

به طور کلی، برنامه شما نباید عملیات ورودی/خروجی پرهزینه را روی نخ اصلی اجرا کند. در صورتی که نخ اصلی ... IO Root blocking )، همچنین می‌توانید از حالت سختگیرانه (Strict Mode) برای شناسایی هرگونه عملیات ورودی/خروجی ناخواسته که در نخ اصلی اتفاق می‌افتد، استفاده کنید.

Root blocking

هر تاپیکی که تاپیک را مسدود کرده باشد، با برچسب «» مشخص شده است. Triggered ANR با موارد زیر حاشیه نویسی شده است: برچسب Root blocking . اگر یک تاپیک به عنوان هر دو برچسب گذاری شده باشد Root blocking و Triggered ANR ، آنگاه هیچ ریسمان دیگری وجود ندارد که آن ریسمان را مسدود کند.

اگر هر کدام رشته‌های Triggered ANR (شاید به صورت انتقالی) منتظر رشته‌های دیگر بودند، آنها ... Root blocking . دلایل مختلفی می‌تواند وجود داشته باشد که چرا یک رشته، علت اصلی ANR است.

توصیه

کار فشرده CPU در نخ اصلی را به حداقل برسانید. از نخ‌های کارگر یا پس‌زمینه برای انجام وظایف فشرده CPU استفاده کنید.

کارهای فشرده ورودی/خروجی، مانند بارگذاری از پایگاه داده، را در نخ اصلی به حداقل برسانید.

Unknown root cause

یک تاپیک با برچسب اگر این رشته باعث ایجاد ANR شده باشد اما در حین فرآیند هنگام وقوع ANR غیرفعال بوده باشد، برچسب Unknown root cause . Crashlytics اطلاعات کافی برای تعیین علت ریشه‌ای ندارد. هیچ دلیل واضحی برای وقوع این ANR وجود ندارد.

توصیه

توصیه‌های کلی در مورد نحوه جلوگیری از ANRها را دنبال کنید. برای مثال، مکان‌هایی را در کد خود شناسایی کنید که در آن‌ها رشته اصلی برنامه می‌تواند بیش از ۵ ثانیه مشغول باشد.