石龙镇网站建设公司,网络服务有哪些,wordpress主页 摘要,广告网站有哪些前几天360内推一面的时候面试官问道为什么Bitmap会调用recycle(#xff09;之后还要让bitmap null;
这个方法之前是一直这么用#xff0c;倒没有怎想。 #xff08;知其然不知其所以然#xff09;
贴一个其它地方的解释#xff1a;
Bitmap类的构造方法都是私有的之后还要让bitmap null;
这个方法之前是一直这么用倒没有怎想。 知其然不知其所以然
贴一个其它地方的解释
Bitmap类的构造方法都是私有的所以开发者不能直接new出一个Bitmap对象只能通过BitmapFactory类的各种静态方法来实例化一个Bitmap。仔细查看BitmapFactory的源代码可以看到生成Bitmap对象最终都是通过JNI调用方式实现的。所以加载Bitmap到内存里以后是包含两部分内存区域的。简单的说一部分是Java部分的一部分是C部分的。这个Bitmap对象是由Java部分分配的不用的时候系统就会自动回收了但是那个对应的C可用的内存区域虚拟机是不能直接回收的这个只能调用底层的功能释放。所以需要调用recycle()方法来释放C部分的内存。从Bitmap类的源代码也可以看到recycle()方法里也的确是调用了JNI方法了的。 public void recycle() {if (!mRecycled) {if (nativeRecycle(mNativeBitmap)) {// return value indicates whether native pixel object was actually recycled.// false indicates that it is still in use at the native level and these// objects should not be collected now. They will be collected later when the// Bitmap itself is collected.mBuffer null;mNinePatchChunk null;}mRecycled true;}}