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

今天一上午在解决一个问题就是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));

        }

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

你可能感兴趣的:(Android)