美文网首页
内存优化笔记

内存优化笔记

作者: 952625a28d0d | 来源:发表于2019-01-16 16:29 被阅读8次

    内存性能对比

    image.png

    内存分配以及问题出现区域

    image.png
    • 内存造成的两个主要问题:异常、卡顿

    内存理解误区

    • 内存占用越少越好

      • 应用是否占用了过多内存,跟设备、系统和当时情况有关,而不是具体的数值300MB、200MB等。尽可能做到用的时候分配、用完即时释放即可。
    • Android 内存分配发展史

    image.png

    既然8.0以后重新将 Bitmap内存放入到了Native中,那么是不是可以随便滥用图片了呢?

    • 答案是否定的。如果手机物理内存不足,那么lmk便会开始杀进程,从后台、桌面、服务、前台、直到手机重启。

    • lmp杀进程的顺序


      image.png
    • low memory killer设计,是假定我们都遵守安卓规范。但是很多App都是杀不死的小强,杀了还会自动起进程,最终导致server卡死。

    • 8.0之前的5.0-7.0的系统如何把Bitmap内存放到Native内存中呢?

    // 步骤一:申请一张空的 Native Bitmap
    Bitmap nativeBitmap = nativeCreateBitmap(dstWidth, dstHeight, nativeConfig, 22);
    
    // 步骤二:申请一张普通的 Java Bitmap
    Bitmap srcBitmap = BitmapFactory.decodeResource(res, id);
    
    // 步骤三:使用 Java Bitmap 将内容绘制到 Native Bitmap 中
    mNativeCanvas.setBitmap(nativeBitmap);
    mNativeCanvas.drawBitmap(srcBitmap, mSrcRect, mDstRect, mPaint);
    
    // 步骤四:释放 Java Bitmap 内存
    srcBitmap.recycle();
    srcBitmap = null;
    
    
    • 虽然上面的方法能实现低版本系统的手机内存转移,但是也有两个问题,一个是兼容性问题,另一个是频繁申请Java Bitmap容易造成内存抖动

    内存优化方法

    • 设备分级
      根绝手机年限不同,内存大小不同。推出不同版本,如今日头条和今日头像极速版。减少进程数等等
    • Bitmap优化
      • 统一图片库、统一监控。如使用Glide、Fresco或者自研都可以。Bitmap.createBitmap、BitmapFactory等接口方法统一。监控的话大图监控和重复图片监控
    • 内存泄漏

    相关文章

      网友评论

          本文标题:内存优化笔记

          本文链接:https://www.haomeiwen.com/subject/neemdqtx.html