zoukankan      html  css  js  c++  java
  • 一、Bitmap的recycle问题

        尽管Android有自己的垃圾回收机制,对于是不是要我们自己调用recycle,还的看情况而定。假设仅仅是使用少量的几张图片,回收与否关系不大。但是若有大量bitmap须要垃圾回收处理,那必定垃圾回收须要做的次数就很多其它也发生地更频繁,会对系统资源造成负荷。所以,这个时候还是自己试用recycle来释放的比較好。

        怎样去使用recycle()方法和何时试用recycle()都是值得考虑的问题。否側,极易出现以下的异常:

    05-15 08:31:00.117: E/AndroidRuntime(513): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@44c093b8
    
    java执行时异常:试图使用一个已经回收了的图片


      仅仅有当你确认你不会在使用这个bitmap的时候,就能够选择调用recycle()方法释放它。

      今天在做个小測试的时候,就由于recycle()的调用出现了异常。原因是:

    在xml文件里,ImageView有两个方法来设置一张显示的图片:

     android:background="@drawable/aa"
     android:src="@drawable/aa"

    刚開始,我使用background,然后在程序中,这样设置

                            // 获得ImageView当前显示的图片
    			Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();
    			
    			Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),
    					bitmap1.getHeight(), matrix, true);
    			// 假设图片还没有回收,强制回收
    			if (!bitmap1.isRecycled()) {
    				bitmap1.recycle();
    			}
    			// 依据原始位图和Matrix创建新的图片
    			imageView.setImageBitmap(bitmap2);

    由于imageView.setImageBitmap()方法设置的是相应的src的图片,而不是background。而我却把background的图片给回收了。这样,就导致了异常的发生。

    所以改动成例如以下的代码,去调用setBackGround()方法

                           // 获得ImageView当前显示的图片
    			Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();
    			Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),
    					bitmap1.getHeight(), matrix, true);
    			// 假设图片还没有回收,强制回收
    			if (!bitmap1.isRecycled()) {
    				bitmap1.recycle();
    			}
    			// 依据原始位图和Matrix创建新的图片
    			//imageView.setImageBitmap(bitmap2);
    			imageView.setBackgroundDrawable(new BitmapDrawable(bitmap2));

    所以,一定要注意ImageView图片的来源问题,然后在进行对应的recycle。


  • 相关阅读:
    百度地图根据经纬度计算瓦片行列号
    【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件
    TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
    重中之重:委托与事件
    可复用代码:组件的来龙去脉
    [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)
    物以类聚:对象也有生命
    导入导出Android手机文件
    Android修改system只读权限
    SSHDroid(SSH Server for Android)通过PC或命令连接android
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4018617.html
Copyright © 2011-2022 走看看