Bitmap的回收
澳门新葡京官网
澳门新葡京官网
当前位置 : 澳门新葡京官网 > 网上赌博新址

Bitmap的回收

我从网上下载了一张图片。

private void downloadPost
    {
        HttpURLConnection conn = null;
        try
        {
            URL url = new URLIMAGE_URL;
            conn = HttpURLConnection url.openConnection;
            if conn.getResponseCode == HttpStatus.SC_OK
            {
                InputStream is = conn.getInputStream;
                Bitmap bitmap = BitmapFactory.decodeStreamis;
                Message msg = new Message;
                msg.obj = bitmap;
                msg.what = 1;
                handler.sendMessagemsg;
            }
        }
        catch Exception e
        {
            e.printStackTrace;
        }
    }

传给Handler处理的时候,如果设置了bitmap的回收,则imageview.setImageBitmapbitmap;没有显示图片,但是注视掉以后就显示了,是我回收的地方不对吗?

public void handleMessageMessage msg
        {
            super.handleMessagemsg;
            switch msg.what
            {
                case 1:
                    Bitmap bitmap = Bitmap msg.obj;
                    imageview.setImageBitmapbitmap;
                    if bitmap != null && !bitmap.isRecycled
                    {
                        bitmap.recycle;
                    }
                    break;
            }
        }

怎么看着好奇怪啊,好像图片异步加载+三级缓存;
bitmap回收的时机的确不对;
首先setImageBitmap这个方法只是对bitmap的引用,并没有重新创建bitmap,recycle之后,bitmap从内存清空,当然显示不出图片。在handler中如果非要回收,那可以bitmap = null销毁引用,然后等待GC回收(并不知道有没有卵用);
建议在转场的时候进行释放,比如Activity的onDestory方法里。

你在哪里都不应该回收啊.回收了之后显示不出来不是正常的?
官网的解释

The bitmap is marked as "dead", meaning it will throw an exception if getPixels or setPixels is called, and will draw nothing.

栏目列表

广告位

澳门新葡京官网