Android开发经验之intent传递大数据

来源:互联网 发布:floyd算法的流程图 编辑:程序博客网 时间:2024/05/21 06:53

今天一上午在解决一个问题就是intent传递数据的时候发现闪退的现象,但是没有报错,我想要实现的功能就是把activity1界面的四张图片加一些信息传递到activity2界面中并且显示出来,但是当我传递两张图片的时候可以正常跳转到activity2,但是传递3张图片的时候就出现闪退的现象,所以断定是因为传递的数据比较大的原因。

网上一查还真是,这绝大多数是由于Bitmap过大导致的,因为Intent值适合传递小数据,当传递的数据较大时(官方并没有给出具体的大小限制,江湖有传言是40k,也有人说是1M,可能跟手机也有关系吧),传递就可能失败甚至程序崩溃。那么,为了避免这种情况的发生,我们的做法应该是:

  1. 如果你对图片大小要求不告,可以先将图片进行压缩,然后在传递,保证图片的大小不高即可
  2. 如果你不想对图片进行压缩,可以将图片缓存到一个类的静态成员中,然后在下一个Activity中取即可
  3. 你也可以将图片先保存在本地,然后在下一个Activity中读取文件

我的做法是第一种,因为activity1显示照片的时候有进行过压缩,所以直接获取

  FileOutputStream out = null;                try {                    out = new FileOutputStream(new File(Environment                .getExternalStorageDirectory(),                        PHOTO_FILE_NAME));                    bitmap.compress(Bitmap.CompressFormat.JPEG, 40, out);                } catch (FileNotFoundException e) {                    e.printStackTrace();                }                byte[] byteImage = PicUtils.bitmap2Bytes(bitmap);

PicUtils工具类里面

    /**         * bitmap转换成byte流         *          * @param bm         * @return         */        public static byte[] bitmap2Bytes(Bitmap bm) {            ByteArrayOutputStream baos = new ByteArrayOutputStream();            bm.compress(Bitmap.CompressFormat.PNG, 100, baos);            return baos.toByteArray();        }

activity1

  Intent intent=new Intent(OChangeCardFillInfoActivity.this,OChaneCardFillDetailActivity.class);        intent.putExtra("name",shouhuo_name.getText().toString());        intent.putExtra("address",shouhuo_address.getText().toString());        intent.putExtra("tel",shouhuo_phone.getText().toString());        intent.putExtra("submitId",  imagIdReturn);        intent.putExtra("bitmap1",imagBm1);        intent.putExtra("bitmap2",imagBm2);        intent.putExtra("bitmap3",imagBm3);        intent.putExtra("bitmap4",imagBm4);        // intent.putExtra("bitmap4",((BitmapDrawable)oldPhone_iv4.getDrawable()).getBitmap());        startActivity(intent);

activity2

 if(getIntent()!=null){            shouhuo_name.setText(getIntent().getStringExtra("name")+"");            shouhuo_address.setText(getIntent().getStringExtra("address")+"");            shouhuo_phone.setText(getIntent().getStringExtra("tel")+"");            submitIdNum=getIntent().getStringExtra("submitId");            byte[]imagBm1=getIntent().getByteArrayExtra("bitmap1");            byte[]imagBm2=getIntent().getByteArrayExtra("bitmap2");            byte[]imagBm3=getIntent().getByteArrayExtra("bitmap3");            byte[]imagBm4=getIntent().getByteArrayExtra("bitmap4");            oldPhone_iv.setImageBitmap(PicUtils.Bytes2Bimap(imagBm1));            oldPhone_iv2.setImageBitmap(PicUtils.Bytes2Bimap(imagBm2));            oldPhone_iv3.setImageBitmap(PicUtils.Bytes2Bimap(imagBm3));            oldPhone_iv4.setImageBitmap(PicUtils.Bytes2Bimap(imagBm4));        }

大功告成,出现问题找到原因之后就很快解决了~

原创粉丝点击