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

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

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

    [java] view plaincopy
    1. 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有两个方法来设置一张显示的图片:

    [java] view plaincopy
    1. android:background="@drawable/aa"  
    2. android:src="@drawable/aa"  

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

    [java] view plaincopy
    1.                      // 获得ImageView当前显示的图片  
    2. Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();  
    3.   
    4. Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 00, bitmap1.getWidth(),  
    5.         bitmap1.getHeight(), matrix, true);  
    6. // 如果图片还没有回收,强制回收  
    7. if (!bitmap1.isRecycled()) {  
    8.     bitmap1.recycle();  
    9. }  
    10. // 根据原始位图和Matrix创建新的图片  
    11. imageView.setImageBitmap(bitmap2);  

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

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

    [java] view plaincopy
    1.                     // 获得ImageView当前显示的图片  
    2. Bitmap bitmap1 = ((BitmapDrawable) imageView.getBackground()).getBitmap();  
    3. Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 00, bitmap1.getWidth(),  
    4.         bitmap1.getHeight(), matrix, true);  
    5. // 如果图片还没有回收,强制回收  
    6. if (!bitmap1.isRecycled()) {  
    7.     bitmap1.recycle();  
    8. }  
    9. // 根据原始位图和Matrix创建新的图片  
    10. //imageView.setImageBitmap(bitmap2);  
    11. imageView.setBackgroundDrawable(new BitmapDrawable(bitmap2));  

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


  • 相关阅读:
    带宽利用率提升50%,腾讯云联网架构方案解析
    重构实践:基于腾讯云Elasticsearch搭建QQ邮箱全文检索
    存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?
    秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用
    降本提效,贝壳搜索推荐架构统一之路
    亿级用户,腾讯看点信息流推荐系统的架构挑战
    优秀程序员,如何提高架构能力?
    如何创建体元栅格?
    导出属性表字段结构
    去除镶嵌数据集中影像的黑边或白边
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879959.html
Copyright © 2011-2022 走看看