滑动保存图片到文件 - 位图回收

时间:2016-02-01 09:46:42

标签: android bitmap android-glide recycle

我想使用Glide将位图保存到文件中,然后使用漂亮的“共享”按钮共享图片。我已经使用了我在文档中找到的一些代码,就像这样:

Glide.with(getApplicationContext())
            .load(imageUrl)
            .asBitmap()
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap b, GlideAnimation<? super Bitmap> glideAnimation) {
                    File file = getExternalFilesDir(null);
                    try {
                        URI uri = new URI(imageUrl);
                        String path = uri.getPath();
                        String nameOfFile = file + "/" + path.substring(path.lastIndexOf('/') + 1);
                        OutputStream os = new FileOutputStream(nameOfFile);
                        b.compress(Bitmap.CompressFormat.JPEG, 100, os);
                        os.flush();
                        os.close();

                        Intent share = new Intent(Intent.ACTION_SEND);
                        share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + nameOfFile));
                        share.setType("image/*");
                        startActivity(Intent.createChooser(share, getResources().getString(R.string.action_share)));
                    } catch (IOException | URISyntaxException e) {
                        e.printStackTrace();
                    }
                }
            });

事情是随机的,应用程序崩溃,因为Bitmap b在压缩之前被回收。我怎么能避免这个?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我和你有类似的问题。 也许你生成一个位图在其他地方使用相同的imageUrl,然后你手动调用bitmap.recycled()。所以你调用 asBitmap()可能会导致Bitmap循环问题。

你可以用asFile();

替换asBitmap()
.asFile()
        .into(new SimpleTarget<File>()

或者不要调用bitmap.recycled()