Obvyklí viníci
Všeobecně se ANR spouští, protože vaše aplikace provádí následující:
- Provádí pomalé operace s I/O v hlavním vlákně.
- Provádění dlouhých výpočtů v hlavním vlákně.
- Provádění synchronního volání pojiva v hlavním vlákně a jinému procesu trvá, než odpoví.
- Čekání v hlavním vlákně na jiné vlákno, které provádí dlouhou operaci.
- Zaseknutí v situaci slepé uličky. K deadlocku může dojít v hlavním vlákně, když čeká na prostředky, které jiný proces neuvolnil, takže nemůže získat potřebné prostředky. Tyto jiné procesy mohou být v jiném vlákně, ve vašem procesu nebo ve volání pořadače.
Diagnostické techniky
Používejte přísný režim
Pomocí StrictMode
můžete najít náhodné I/O operace.
Přečtěte si více o
StrictMode
v oficiální dokumentaci.
Povolte dialogová okna ANR na pozadí v možnostech pro vývojáře
Ne všechny ANR jsou pro uživatele viditelné; aplikace se proto může potýkat s problémy s výkonem, aniž by si to uživatel uvědomoval. Povolte dialogy ANR na pozadí v možnostech pro vývojáře.
Prohlížejte trasovací soubory pomocí adb
Trasovací soubory jsou generovány při události ANR. Tyto soubory můžete vytáhnout pomocí Android Debug Bridge (adb) jako root pomocí následujících příkazů:
adb rootadb shell ls /data/anradb pull /data/anr/<filename>
.