Android中内存优化相关知识点
来源:互联网 发布:洛天依软件如何解压 编辑:程序博客网 时间:2024/05/22 14:07
为什么要进行内存优化
- APP运行内存限制,OOM导致APP崩溃
- APP性能:流畅性、响应速度和用户体验
Android系统内存分配与回收方式
- 一个APP通常就是一个进程对应一个虚拟机
- GC只在Heap剩余空间不够时才发出垃圾回收
- GC触发时,所有的线程都是会被暂停
APP内存限制机制
- 每个APP分配的最大内存限制,随不同设备而不同
- 图片占用内存较多
内存管理机制的特点
- 更少的占用内存
- 在合适的时候,合理的释放系统资源
- 在系统内存紧张的情况下,能释放掉大部分不重要的资源,来为Android系统提供可用的内存
- 能够很合理的在特殊生命周期中,保存或者还原重要数据,以至于系统能够正确的重新恢复该应用。
切换应用时后台APP清理机制
- APP切换时的LRU Cache
- onTrimMemory()回调方法
APP内存优化方法
- 数据结构优化
- 对象服用
- 避免内存泄漏
- 当Service完成任务后,尽量停止它。
- 在UI不可见的时候,释放掉一些只有UI使用的资源
- 在系统内存紧张的时候,尽可能多的释放掉一些非重要资源
- 避免滥用Bitmap导致的内存浪费
- 使用针对内存优化过的数据容器
- 避免使用依赖注入的框架
- 使用ZIP对齐的APK
- 使用多进程
数据结构的优化
- 频繁字符串拼接用StringBuilder(如果用”+”拼接,则中间的+也会产生内存)
- ArrayMap、SparseArray替换HashMap
- 内存抖动
对象复用
- 复用系统自带的资源
- ListView/GridView的ConvertView复用
- 避免在onDraw方法里面执行对象的创建
避免内存泄漏
- 内存泄漏:由于代码瑕疵,导致这块内存,虽然是停止不用了,但依然被其他东西引用着,使得GC没法对它回收。
- 内存泄漏会导致剩余可用Heap越来越少,频繁触发GC
- 引用上下文时,建议使用Application Context而不是Activity Context
- 注意Cursor对象是否及时关闭
什么是内存溢出oom
当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出的out of memory异常。也就是内存溢出。
一些容易混淆的概念
- 内存溢出:就是oom out of memory异常
- 内存抖动:短时间内创建大量的对象,然后释放。瞬间产生的对象会严重占用内存区域。
- 内存泄漏:进程中的某些对象,没有被其他地方引用到,导致gc无法产生作用,当内存泄漏到一定程度时,会导致内存溢出的现象。
如何解决oom
- 解决Bitmap优化
- 其他方法
解决Bitmap优化
- 图片显示
- 及时释放内存
- 图片压缩
- inBitmap属性
- 捕获异常
其他方法
- listview:convertview/lru
- 避免在onDraw方法里面执行对象的创建
- 谨慎使用多进程
java内存的分配策略
- 静态存储区(方法区)
- 栈区(方法的局部变量)
- 堆区(对象)
java是如何管理内存的
java的内存管理就是对象的生成和释放的过程,内存的释放是通过GC来完成的。
java中内存泄漏
内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费成为内存泄漏。
Android内存泄漏
- 单例(context要使用Application context,而不是使用Activity context,防止使用Activity导致,Activity销毁无法回收而导致内存泄漏)
- 匿名内部类(匿名内部类一般持有外部类的引用,从而导致内存泄漏,解决办法是改变为静态内部类)
- handler(handler持有外部类的引用,里面有消息没处理,从而导致Activity无法回收,解决办法是使用静态handler,并使用弱引用来引用Activity)
- 避免使用static变量
- 资源未关闭造成的内存泄漏
- AsyncTask造成的内存泄漏
- Bitmap也需要调用recycle()方法
阅读全文
0 0
- Android中内存优化相关知识点
- android优化以及相关知识点
- Android中冷启动相关知识点
- android内存优化相关知识
- Android中其他优化知识点
- Android中内存优化
- mysql优化相关知识点
- Android中HandlerThread面试相关知识点
- Android中UI卡顿相关知识点
- Android的内存优化相关记录
- Android——内存优化相关
- tomcat服务中内存相关的优化
- Android中Bitmap内存优化
- Android内存优化大全(中)
- Android内存优化大全(中)
- Android内存优化大全(中)
- Android内存优化大全(中)
- Android内存优化大全(中)
- Improving Object Detection With One Line of Code
- Android Scroller分析
- 简单说说Delphi中线程的释放
- 1005. Spell It Right (20)
- 玩转名企Java技术,报名动力节点高端课程
- Android中内存优化相关知识点
- 《标题党》自我修炼的10个秘籍
- iOS引导页
- Unity 水波纹Shader
- BluetoothAdapter在Android6.0/7.0+以上startDiscovery不能发现蓝牙设备问题
- Qt软件开发文档18---QSettings类的封装与调用,文件路径判断
- String StringBuild Imoc
- B树和红黑数的区别
- Spring+ActiveMQ消息持久化,Topic持久化订阅