android 内存优化

android内容优化之道

1.共享内存

android尝试跨进程共享ram页,分配和回收内存

每个进程都被限制到一个单一的虚拟内存范围内

Dalvik堆不会压缩堆的逻辑空间,这意味着Android不会进行碎片整理来腾出空间,只有空闲空间在堆的尾部时(at the end of the heap),Android才可以压缩逻辑堆的空间。但这并不意味着堆使用的物理内存不能被压缩

当App内存达到了空间最大值,并尝试分配更多的内存,就会发生oom

用户切换APP时,Android会使用LRU缓存来保存那些被切换的APP而不是使用交换空间来实现

在开发的所有阶段你都应该考虑RAM的限制,即使是在设计阶段,你还没有开始编码工作。你应该使用以下技术来管理你的APP内存。

app内存优化 :

减少service的使用,因为service不使用的时候,还在后台运行,会占用内存,当service没有占用的时候一定要结束service,

当用户界面隐藏时,释放内存

当用户退出UI界面时,使用onTrimMemory()回调函数,你应该使用这个方法去监听TRIM_MEMORY_UI_HIDDEN这个值,他表示UI界面当前正在隐藏,使用被UI界面占用的内存

app所有的界面都隐藏时,才会在OnTrimMemory()回调函数中检测到TRIM_MEMORY_UI_HIDDEN这个值,与onStop不同,onStop是界面隐藏时调用

内存紧张时,释放内存

检查你应该使用多少内存

不同的安卓数量有着不同的内存,使用getMemoryClass获得可以使用内存大额大小

使用bitmaps避免内存浪费,当你加载一张bitmap时,如果他分辨率过高

使用最佳的数据容器:如sparseArray,sparseBooleanArray,sparseLongArray,避免对键值对的装箱,普通的hashmap会花费更多的内存,因为他需要为每一个映射分配一个实体

注意内存开销

尽量避免使用枚举类型,枚举类型占用空间是普通类型的两倍。

小心代码抽象化

抽象化需要更多的代码来执行他,需要更多的开销

为序列化数据使用nano protobufs

数据缓冲区是一种有谷歌序列化而设计的泛语言

不要依赖注入框架

使用proGuard来去除不必要的代码

在最终生成的apk文件使用zipalign,通过androidMainFest.xml文件中声明的android:process来为应用分身,是你的service运行在一个单独的进程中

你可能感兴趣的:(android 内存优化)