美文网首页
内存优化笔记

内存优化笔记

作者: 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