گاهی برنامه ما هنگ میکنه و اندروید ی پیام نشون میده ک میگه صبر میکنی یا برنامه رو ببندم !!!

به این پیام میگن ANR و یعنی برنامه دیگه پاسخگو نیست و در دو زمان این پیام رو می‌بینیم:

  • زمانی که برنامه ما توی foreground هستش و به مدت ۵ ثانیه هیچ واکنشی به رخداد ورودی و BroadcastReceiver ها نشون نمی‌ده
  • زمان که برنامه ما توی foreground نیست ولی ما ی BroadcastReceiver داریم ک برای ی تایم زیادی داره فعالیت می‌کنه

چ زمان هایی ممکنه این خطا رخ بده:

  • زمانی ک ی کار I/O بیس داریم تو ترد اصلی انجام میدیم برنامه کند بشه
  • ی محاسبه سنگین توی ترد اصلی داشته باشیم
  • ترد اصلی رو بایند کرده باشیم ب ی چیز دیگه ک اون خیلی طول بکشه

ی کتابخونه هم ب نام StrictMode وجود داره کمک میکنه بهتر این مشکلات رو پیدا و حل کنیم.

برای استفاده سریع از StrictMode میشه کد زیر رو توی کلاس Application برنامه اضافه کنیم:

public void onCreate() {
    if (DEVELOPER_MODE) {
        StrictMode.setThreadPolicy(
            new StrictMode.ThreadPolicy.Builder()
            .detectDiskReads()
            .detectDiskWrites()
            .detectNetwork()   // or .detectAll() for all detectable problems
            .penaltyLog()
            .build());
        StrictMode.setVmPolicy(
            new StrictMode.VmPolicy.Builder()
            .detectLeakedSqlLiteObjects()
            .detectLeakedClosableObjects()
            .penaltyLog()
            .penaltyDeath()
            .build());
    }
    super.onCreate();
}

+