Android面试焦点:ANR与OOM异常及性能优化策略
163 浏览量
更新于2024-08-31
1
收藏 150KB PDF 举报
"本文主要探讨了Android异常处理与性能优化方面的面试问题,重点讲解了ANR(Application Not Responding)和OOM(Out of Memory)异常,同时提供了相应的解决方案,并提到了Bitmap优化和其他内存管理策略。"
在Android开发中,对异常处理和性能优化的理解是面试中的重要环节。首先,ANR异常是开发者需要特别关注的问题。ANR表示应用程序无响应,通常出现在主线程执行了长时间运行的任务,导致用户界面无法及时更新。主线程,也称为UI线程,负责处理用户交互和界面更新,因此任何在此线程中的阻塞操作都会引发ANR。以下是一些在主线程执行的操作:
1. Activity的所有生命周期回调,如onCreate()、onStart()、onResume()等。
2. Service默认在主线程运行。
3. BroadcastReceiver的onReceiver()回调。
4. 没有使用子线程的Looper的Handler的handlerMessage()或post(Runnable)。
5. AsyncTask的非doInBackground()回调。
解决ANR的方法包括使用AsyncTask、Thread或HandlerThread来处理耗时操作,以及避免在activity的onCreate()和onResume()中放入长时间运行的代码。
接着,我们讨论了OOM异常。这是由于应用内存使用超过Dalvik虚拟机允许的最大值所引发的。区分内存溢出、内存抖动和内存泄漏很重要:
- 内存溢出:即OOM,内存使用超出限制。
- 内存抖动:短时间内大量对象被快速创建和释放,导致频繁的垃圾收集。
- 内存泄漏:不再使用的内存未被正确释放,持续占用内存。
针对OOM,特别是Bitmap优化是关键,因为Bitmap对象占用大量内存。优化策略包括:
1. 按需加载和释放Bitmap,尤其是ListView滚动时。
2. 使用Bitmap的recycle()方法释放内存,减少C区内存占用。
3. 图片压缩,减小内存占用。
4. 利用inBitmap属性进行图片复用。
5. 捕获并处理OOM异常。
此外,还可以通过其他方式减少内存压力,例如:
1. ListView的convertView和使用三级缓存(LRU)策略。
2. 避免在onDraw()方法中创建对象。
3. 谨慎使用静态变量和单例,防止内存泄漏。
理解并掌握ANR和OOM的处理以及相关的性能优化策略,对于提升Android应用的用户体验和稳定性至关重要,也是面试中必不可少的知识点。
2023-02-15 上传
2018-10-15 上传
2024-03-09 上传
2024-04-19 上传
2023-05-31 上传
2024-02-06 上传
2023-07-31 上传
2024-04-19 上传
2024-07-26 上传
2023-06-09 上传
weixin_38519660
- 粉丝: 4
- 资源: 949
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章