android中遇到 ANR问题及解决
来源:互联网 发布:牛贝公众号淘宝客系统 编辑:程序博客网 时间:2024/05/17 22:38
首先ANR的发生是有条件限制的,分为以下三点:
1.只有主线程才会产生ANR,主线程就是UI线程;
2.必须发生某些输入事件或特定操作,比如按键或触屏等输入事件,在BroadcastReceiver或Service的各个生命周期调用函数;
3.上述事件响应超时,不同的context规定的上限时间不同
a.主线程对输入事件5秒内没有处理完毕
b.主线程在执行BroadcastReceiver的onReceive()函数时10秒内没有处理完毕
c.主线程在Service的各个生命周期函数时20秒内没有处理完毕。
导致ANR的根本原因是什么呢?简单的总结有以下两点:
1.主线程执行了耗时操作,比如数据库操作或网络编程
2.其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。
导致ANR的原因有如下几点:
1.耗时的网络访问
2.大量的数据读写
3.数据库操作
4.硬件操作(比如camera)
5.调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁的时候
6.service binder的数量达到上限
7.system server中发生WatchDog ANR
8.service忙导致超时无响应
9.其他线程持有锁,导致主线程等待超时
10.其它线程终止或崩溃导致主线程一直等待
如何避免ANR的发生呢或者说ANR的解决办法是什么呢?
1.避免在主线程执行耗时操作,所有耗时操作应新开一个子线程完成,然后再在主线程更新UI。
2.BroadcastReceiver要执行耗时操作时应启动一个service,将耗时操作交给service来完成。
3.避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。
- android中遇到 ANR问题及解决
- Android开发中ANR问题出现及解决
- Android开发中ANR问题出现及解决
- Android中什么是ANR?怎么解决ANR?
- Android ANR问题的解决
- android 开发中遇到的问题及解决方式
- Android遇到的问题及解决(持续更新中)
- Android 开发中遇到的 Exception & ANR
- android开发遇到问题及错误解决
- TankWar中遇到的问题及解决
- 如何分析解决Android ANR 问题
- 如何解决Android的ANR问题?
- 解决android中Asynctask遇到的问题
- Android开发中ANR详解及解决办法
- Eclipse下Android更新升级过程中遇到的问题及解决
- 浅谈ANR及如何分析解决ANR
- 浅谈ANR及如何分析解决ANR
- 浅谈ANR及如何分析解决ANR
- NoSQL简介
- Codeforces Round #436 (Div. 2) (题解)
- Windows平台下用命令快速打开Linux虚拟机的技巧
- 20个非常有用的Java程序片段
- 深度学习-21天实战caffe 笔记
- android中遇到 ANR问题及解决
- BZOJ1109: [POI2007]堆积木Klo
- [Codeforces Round #436](Div. 2)
- Java线程池使用与原理
- 转载:自动化测试金字塔与反模式
- 小白算法学习 KMP
- BZOJ1110: [POI2007]砝码Odw
- BI Informatica 汇总组件
- ansible常用模块用法