如何有效地将一个活动的位图列表传递给另一个活动?

时间:2019-04-03 14:37:24

标签: java android arraylist

我有3个Mat Opencv对象的列表,我需要将此列表从一个活动传递到Android中的另一个对象。

我不知道如何在活动之间共享此Mat列表,因此我将那些Mat对象转换为Bitmap,现在我不得不处理Bitmap。

我知道Bitmap类默认实现Parcelable,因此我像这样使用putParcelableArrayList

Intent intent = new Intent(InputProcessingActivity.this, CompareActivity.class);
intent.putParcelableArrayListExtra("", mats);
startActivity(intent);

但是我的Application只是变黑并保持这种状态,我认为这是因为位图对象太大而引起的。

您能提出解决方案吗?

2 个答案:

答案 0 :(得分:2)

将您的Bitmap保留在某些文件中,并通过意图传递文件的路径。

答案 1 :(得分:2)

如果您打算仅在运行时保留该内容,建议您将该列表存储在一个单例对象中,然后在下一个活动中从中读取。

这是一种非常简单,直接且对CPU / IO友好的解决方案。

示例:

public class BitmapDTO {

    private static BitmapDTO instance;

    public static BitmapDTO getInstance() {
        if (instance == null)
            instance = new BitmapDTO();
        return instance;
    }

    private List<Bitmap> bitmaps;

    private BitmapDTO() { }

    public void setBitmaps(List<Bitmap> bitmaps) {
        this.bitmaps = bitmaps;
    }

    public List<Bitmap> getBitmaps() {
        return bitmaps;
    }

}

源活动:

BitmapDTO.getInstance().setBitmaps(myBitmaps);
Intent intent = new Intent(InputProcessingActivity.this, CompareActivity.class);
startActivity(intent);

最后,关于您的目标活动:

private List<Bitmap> myBitmaps;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);
    myBitmaps = BitmapDTO.getInstance().getBitmaps();
    // Do your stuff
}