ImageView导致应用程序崩溃。

3
当imageView被点击时,我想要全屏显示图片。第一次可以实现,但之后就会崩溃。错误指向:
startActivity(intent);

代码

Intent intent = new Intent(AddExpenses.this,FullScreenImage.class);
imageView.buildDrawingCache();
Bitmap image= imageView.getDrawingCache();
Bundle extras = new Bundle();
extras.putParcelable("imagebitmap", image);
intent.putExtras(extras);
startActivity(intent);
image.recycle();

全屏图片

public class FullScreenImage extends Activity {

    @SuppressLint("NewApi")

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.layout_full);
        Bundle extras = getIntent().getExtras();
        Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap");
        ImageView imgDisplay;
        Button btnClose;

        imgDisplay = (ImageView) findViewById(R.id.imgDisplay);
        btnClose = (Button) findViewById(R.id.btnClose);
        btnClose.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                FullScreenImage.this.finish();
            }
        });
        imgDisplay.setImageBitmap(bmp );
    }
}

日志记录

E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Can't parcel a recycled bitmap
            at android.graphics.Bitmap.checkRecycled(Bitmap.java:256)
            at android.graphics.Bitmap.writeToParcel(Bitmap.java:1366)
            at android.os.Parcel.writeParcelable(Parcel.java:1254)
            at android.os.Parcel.writeValue(Parcel.java:1173)

我使用extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true));,但是出现了新的错误。

java.lang.IllegalStateException: Can't copy a recycled bitmap
            at android.graphics.Bitmap.checkRecycled(Bitmap.java:256)
            at android.graphics.Bitmap.copy(Bitmap.java:454)
            at com.example.tony.monthlyexpenses.AddExpenses$4.onClick(AddExpenses.java:176)

删除 image.recycle(); 这一行,然后检查。 - ρяσѕρєя K
@ρяσѕρєяK 如果我删除这行代码,它不会崩溃,但它会返回之前的图像而不是新的。顺便说一下,我将画廊图像加载到imageView中。 - AI.
为什么不直接将图像URI传递到下一个屏幕,而不是传递大的位图对象,这会随时引起内存问题。 - ρяσѕρєя K
请查看以下链接。答案 - Tulsi
显示剩余2条评论
1个回答

0

我认为问题是因为序列化是在意图被触发之后完成的。所以,不要使用位图,而是将Bitmap的副本放在意图中,像这样:

extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true));
intent.putExtras(extras);

请检查此方法是否解决了问题。


我得到了这个 java.lang.IllegalStateException: Can't copy a recycled bitmap - AI.
image.recycle(); 加一些延迟。 - Sunil Sunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接