-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-03-19:ANR 出现的场景以及解决方案? #8
Comments
Android系统中,AMS和WMS会检测App的响应时间,如果App在特定时间无法相应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。 |
在Android中,应用的响应性被活动管理器(Activity Manager)和窗口管理器(Window Manager)这两个系统服务所监视。当用户触发了输入事件(如键盘输入,点击按钮等),如果应用5秒内没有响应用户的输入事件,那么,Android会认为该应用无响应,便弹出ANR对话框。而弹出ANR异常,也主要是为了提升用户体验。 解决方案是对于耗时的操作,比如访问网络、访问数据库等操作,需要开辟子线程,在子线程处理耗时的操作,主线程主要实现UI的操作 |
我遇到过一个实际的场景, ContentResover 拿数据的时候是串行的, 看一下 binder 相关的东西, 论证一下; |
我觉得主要是Android中View不是线程安全的,为了保证线程安全和性能就弄了一个单线程的模型,即UI线程,来做绘制的一些操作。所有的UI线程的绘制必须在16ms内完成(保证60帧运行),所以Android里面会存在ANR的提示来保证这个原则。 |
你前面说的是对的,不过跟Anr无关。ANR本质是个检测工具,用来提示用户和开发者App主线程中某个操作耗时太久并长时间未返回,这是android官方对App主线程性能的限制。 |
在主线程进行耗时操作,导致用户的操作没得到及时的响应 就会报出 Application Not Response 的问题 即ANR 。 |
出现的原因:ui线程响应超时,出现超时的原因可能是ui线程发生阻塞不能及时处理当前事件,超过5s。 |
场景 ANR出现的类型有两种 如何避免 |
推荐看下官方 ANR 文档: ANR 出现的场景
解决方式:首先,通过各种方式定位问题
解决问题
|
在UI线程执行耗时的操作会导致ANR |
|
这是来自QQ邮箱的假期自动回复邮件。
|
No description provided.
The text was updated successfully, but these errors were encountered: