美文网首页
Android的ANR

Android的ANR

作者: 简书不简单iiii | 来源:发表于2020-03-10 15:21 被阅读0次

主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。

主线程中存在耗时的计算

主线程中错误的操作,比如Thread.wait或者Thread.sleep等 Android系统会监控程序的响应状况,一旦出现下面两种情况,则弹出ANR对话框

应用在5秒内未响应用户的输入事件(如按键或者触摸)

BroadcastReceiver未在10秒内完成相关的处理

Service在特定的时间内无法处理完成 20秒

以上情况也是解决anr的思路

如:

1、使用AsyncTask处理耗时IO操作。

2、使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。

3、使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。

4、Activity的onCreate和onResume回调中尽量避免耗时的代码。

BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

相关文章

网友评论

      本文标题:Android的ANR

      本文链接:https://www.haomeiwen.com/subject/wwwwdhtx.html