Gyakori bűnösök
Az ANR-eket általában azért váltja ki, mert az alkalmazás a következőket végzi:
- Lassú műveleteket hajt végre I/O-val a főszálon.
- Hosszú számításokat végez a főszálon.
- Szinkron köteghívást hajt végre a főszálon, és a másik folyamatnak időbe telik a válaszadás.
- Várakozik a főszálon egy másik szálra, amely hosszú műveletet hajt végre.
- Elakad egy holtponti helyzetben. Holtpontok akkor fordulhatnak elő a főszálban, ha olyan erőforrásokra vár, amelyeket egy másik folyamat nem szabadított fel, így nem tudja megszerezni a szükséges erőforrásokat. Ezek a más folyamatok lehetnek egy másik szálban, a te folyamatodban vagy egy köteghívásban.
Diagnosztikai technikák
Strict mód használata
A StrictMode
segítségével megtalálhatjuk a véletlen I/O műveleteket.
Az
StrictMode
-ról bővebben a hivatalos dokumentációban olvashat.
Háttérben futó ANR-dialógusok engedélyezése a fejlesztői beállításokban
Nem minden ANR látható a felhasználó számára, ezért előfordulhat, hogy az alkalmazás teljesítményproblémákkal küzd anélkül, hogy a felhasználó észrevenné. Engedélyezze a háttérben megjelenő ANR párbeszédpaneleket a fejlesztői beállításokban.
A nyomkövetési fájlok megtekintése az adb használatával
A nyomkövetési fájlok egy ANR esemény során keletkeznek. Ezeket a fájlokat az Android Debug Bridge (adb) segítségével húzhatja ki root felhasználóként a következő parancsokkal:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>