我有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
只是变黑并保持这种状态,我认为这是因为位图对象太大而引起的。
您能提出解决方案吗?
答案 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
}