Bitmap的释放流程


      上篇文章谈到了Bitmap的生成,现在说说Bitmap的释放,要不总是有种没说完的感觉。

      Bitmap的释放相对来说,比较简单,还是先上张时序图吧!

Bitmap的释放流程_第1张图片


一些说明:
1,AndroidPixelRef的设置是在Bitmap生成的GraphicsJNI::setJavaPixelRef里完成的,这里可以参见文章《Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream》。具体代码如下:

[cpp]  view plain copy
  1. bool GraphicsJNI::setJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,  
  2.                                   SkColorTable* ctable, bool reportSizeToVM) {  
  3. ......  
  4.     SkPixelRef* pr = reportSizeToVM ?  
  5.                         new AndroidPixelRef(env, addr, size, ctable) :  
  6.                         new SkMallocPixelRef(addr, size, ctable);  
  7.   
  8.   
  9. ......  
  10. }  
2,VMRuntime.trackExternalFree把Bitmap占用的虚拟机heap内存归还。如果你有兴趣的话,请具体参见dalvik\vm\native\dalvik_system_VMRuntime.c。

你可能感兴趣的:(Android)