如何解决android内存异常?

时间:2013-12-04 11:31:53

标签: android bitmap

我是开发app,在这里我有两个活动,一个是PaintActivity,另一个是TextActivity。当用户单击PaintActivity中的按钮时,TextActivity将与PainActivity的位图一起显示。在此用户输入文本,并在编辑完成后为文本提供字体样式和颜色单击应用按钮以转到paintactivity以及文本和位图,我使用以下代码它工作正常,除了一个设备,然后我在一个模拟器(5.4“FWVGA(480 * 854:mdpi))中检入了不同的模拟器,在TextAcitivty中单击”应用“按钮时出现了内存异常。

我正在使用以下代码

PaintActivity:

text.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             realPaint.setDrawingCacheEnabled(true);
             Bitmap b2 = Bitmap.createBitmap(realPaint.getDrawingCache());
            realPaint.setDrawingCacheEnabled(true);
             ByteArrayOutputStream bs = new ByteArrayOutputStream();
             b2.compress(Bitmap.CompressFormat.PNG, 100, bs);
             byte[] byteArray = bs.toByteArray();
             Intent i=new Intent(PaintActivity.this, TextActivity.class);
             i.putExtra("bitT", byteArray);
             realPaint.setDrawingCacheEnabled(false);
           startActivityForResult(i,TEXT_BITMAP);
        }
    });

protected void onActivityResult(int requestCode, int resultCode, Intent data){

     if(requestCode==TEXT_BITMAP && resultCode==RESULT_OK && data!=null){
          byte[] byteArray=data.getByteArrayExtra("bittext");
          BitmapFactory.Options opt=new BitmapFactory.Options();
          opt.inSampleSize=3;
          Bitmap bittext=BitmapFactory.decodeByteArray(byteArray,0,byteArray.length,opt);
          image.setImageBitmap(bittext);
    }
}

TextACtivity:

apply.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent i=new Intent();
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        loadBitmapFromView(real).compress(Bitmap.CompressFormat.PNG, 100, bs);
        byte[] byteArray = bs.toByteArray();
        i.putExtra("bittext", byteArray);
        setResult(RESULT_OK,i);
        finish();
    }
});

2 个答案:

答案 0 :(得分:0)

您可以尝试使用另一个配置来减小位图的大小 - 即Config.RGB_565

 opt.inSampleSize=3;
 opt.inPreferredConfig = Config.RGB_565;

答案 1 :(得分:0)

我使用静态位图而不是发送字节数组(将位图转换为字节数组)以避免内存不足异常。