intent传递bitmap失效的问题

概述:

虽然 Bitmap implements Parcelable ,支持intent来传递,但是还是不建议这样传。网上有说大于40kB就会失效,但是我测试两张图片,一张是68kb的可以传,一张是152kb的就失效了,报android.os.TransactionTooLargeException异常。这说明intent对传递的数据是有大小限制的



将bitmap转换成byte数组再传递:

Intent intent=new Intent(this,UIActivity.class);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
getBitmap().compress(Bitmap.CompressFormat.PNG, 100, baos);
byte [] bitmapByte =baos.toByteArray();
intent.putExtra("test", bitmapByte);
startActivity(intent);

byte [] bis = getIntent().getByteArrayExtra("test");
this.bitmap1 = BitmapFactory.decodeByteArray(bis, 0, bis.length);
这样写可以实现图片传递,但是搞一张大图(试了一张1M的),还是蹦了,所有还是不推荐


传递图片的资源id或者路径:

Intent intent=getIntent();
Bundle bundle=new Bundle();
bundle.putInt("imageId",imageId[position] );
intent.putExtras(bundle);

这种是可行的


通过构造函数的方式来传递:

设置bitmap为参数:

new UIActivity(this , getBitmap());
在目标activity里面接收:

private static Bitmap bitmap1;//必须是静态的
/**
     * 如果添加了有参构造,就必须添加无参构造,否则会报异常
     */
    public UIActivity(){}

    /**
     * 在构造函数里面启动自身activity,会先走无参构造,再走onCreate()。
     * 所有bitmap1必须是静态的
     */
    public UIActivity(Context context , Bitmap bitmap){
        LogUtils.e("bitmap = " + bitmap);
        this.bitmap1 = bitmap;
//        this.bitmap1 = bitmap.copy(Bitmap.Config.ARGB_8888, true);
//        this.bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight());
//        BitmapDrawable drawable = new BitmapDrawable(bitmap);
//        bitmap1 = drawable.getBitmap();
        LogUtils.e("bitmap1 = " + bitmap1);
        context.startActivity(new Intent(context, UIActivity.class));
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值