Activity传递大bitmap的解决方法

传递bitmap的几种方式

  1. 本地资源只传递(int)R.id,然后通过resource去解析。
  2. 如果是内存中的文件,只传递Uri。
  3. 如果是网络流或者视频流,先本地保存图片,然后再传递路径Uri。

笔者项目中需要传递的bitmap超过了intent的最大限制,一直报类似下面的错。综合网上的解决方法,得出以下解决方案。

Caused by: android.os.TransactionTooLargeException: data parcel size 3521852 bytes

保存图片至本地,生成Uri。

具体代码如下

   private Uri bitmap2uri(Context c, Bitmap b) {
        File path = new File(c.getCacheDir() + File.separator + System.currentTimeMillis() + ".jpg");
        try {
            OutputStream os = new FileOutputStream(path);
            b.compress(Bitmap.CompressFormat.JPEG, 100, os);
            os.close();
            return Uri.fromFile(path);
        } catch (Exception ignored) {
        }
        return null;
    }
//MainActivity
 Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                                intent.setData(uri);
                                startActivity(intent);
//SecondActivity
  Uri data = intent.getData();
            iv_show.setImageURI(data);

至此,就成功把bitmap从MainActivity传递至SecondActivity.

猜你喜欢

转载自blog.csdn.net/prince70/article/details/101346069