您的位置:首页 > 移动开发 > Android开发

android 内存管理以及优化 粗略方案

2017-07-27 11:13 225 查看
Android的内存管理方式

1.android系统内存分配和回收方式

一个app通常就是一个进程对应一个虚拟机

通过adb shell 查看应用的内存分配情况

①通过ps来查看系统内的进程

②通过 dumpsys meminfo 包名  查看对应的应用的内存分配情况

 

GC只在heap剩余空间不够的时候才触发垃圾回收,GC触发的时候,所有的线程都是会被暂停

2.app内存限制机制

每一个app分配的最大内存限制,随着不同的设备而不同

吃内存大户:图片

为什么要限制:为了平衡所有的app能够正常运行

3.切换应用时后台app清理机制

App切换的时候的LRU Cache

onTrimMemory()回调方法

4.监控内存的几种方法

AS代码

Float totalMemory = Runtime.getRuntime().totalMemory()

 

AS工具  Tools ->Android -> Android device monitor

 

需要注意的是data object 和 class object的数据

 

APP内存优化方法

1.数据结构优化
频繁字符串拼接用StringBuilder  性能相差不止一点....StringBuilder的拼接碾压String的拼接

Arraymap,SparseArray替换HashMap

 

内存抖动(影响流畅性)

 

再小的Class耗费0.5KB

 

HashMap一个entry需要额外占用32B

 

 

 

2.对象复用

复用系统自带的资源

 

ListView/GridView的ConvertView复用

 

避免在onDraw方法里面执行对象的创建

3.避免内存泄漏

由于代码瑕疵,导致这块内存,虽然是停止不用了,但依然被其他东西引用着,使得GC没法对它进行回收

内存泄漏会导致剩余可用的Heap越来越少,GC越来越频繁,影响流畅性

 

尤其Activity泄漏

 

用Application Context而不是Activity Context

4.OOM问题优化

OOM的必然性和可解决性

 

OOM的绝大部分发生在图片

 

强引用和软引用的意义

 

5.优化OOM的方法

注意临时Bitmap对象的及时回收

避免Bitmap的浪费

Try Catch某些大内存分配的操作

加载bitmap:缩放比例,解码格式,局部加载

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: