Android App性能优化之内存优化

    xiaoxiao2021-03-25  135

    为什么要进行内存优化?

    1.App运行内存限制,OOM导致App崩溃

    2.App性能:流畅性、响应速度和用户体验

    Android的内存管理方式

    Android系统内存分配与回收方式

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

    可以通过下面的命令在终端来查看Android系统进程和内存分配

    adb shell:进入Android底层Linux系统命令

    ps: 查看系统进行的命令

    dumpsys meminfo 进程名:查看内存分配

    ●   GC只在Heap剩余空间不够时才会触发垃圾回收机制

    App内存限制机制

    ●   每个App分配的最大内存限制,岁不同设备而不同

    ●   吃内存大户:图片

    切换应用时后台清理机制

    ●   App切换时采用的是LRU Cache算法

    LRU算法:最近使用的排在最前面,最少可能被清理掉

    ●    onTrimMemory()回调方法

    当系统的内存有变化的时候,会发出这个回调方法给各个应用,当应用收到这个回调时,释放内存。

    监控内存的几种方法

    方法1:通过代码查看

    方法2:Android Studio的自带工具Android Monitor来查看App整体内存变化

    方法3:Android Studio Tools → Android → Android Device Monitor启动设备监控

    Android App内存优化方法

    数据结构优化

    1.频繁字符串拼接用StringBuilder

    2.ArrayMap、SparseArry替换HashMap,内存使用更少,效率更高

    3.内存抖动

    内存抖动是指在短时间内有大量的对象被创建或者被回收的现象。内存抖动出现原因主要是频繁在循环里创建对象,导致大量对象在短时间内被创建,由于新对象是要占用内存空间的,如果一次或者两次在循环里创建对象对内存影响不大,不会造成严重内存抖动,这样可是以接受也是不可避免的,如果是频繁创建对象的话,内存抖动就会很频繁,频繁的内存抖动,会导致垃圾回收机制频繁运行(短时间内产生大量对象,需要大量内存,而且还是频繁抖动,就可能会需要回收内存以用于产生对象,垃圾回收机制就自然会频繁运行了)。

    4.再小的Class也会耗费0.5KB

    对象复用

    1.复用系统自带的资源

    2.ListView/GridView的ConvertView复用

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

    避免内存泄漏

    1.内存泄漏会导致剩余可用Heap越来越少,频繁触发GC

    2.尤其Activity泄漏

    3.用Application Context而不是Activity Context

    4.注意Cursor对象是否及时关闭

    OOM问题优化

    OOM问题分析

    OOM的绝大部分都是跟图片相关的

    强引用、软引用的意义

    String strongRef = String.valueof(Math.random()); String softRef = new SoftReference(String.valueof(Math.random()));

    如果内存不够,强引用在生命周期内是不会被回收的,而软引用是可以被GC回收的。

    优化OOM问题的方法

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

    2.避免Bitmap的浪费

    3.Try catch某些大内存分配的操作

    4.加载Bitmap:缩放比例、解码格式、局部加载

    转载请注明原文地址: https://ju.6miu.com/read-8914.html

    最新回复(0)