我搜索了一个解决方案,但没有找到。我将包含我的 Name 对象的 ArrayList 写入文件,检索到的 ArrayList 稍后将被不同的活动用于相同的目的。此对象是单独包中的单独类。我用 ObjectOutputStream 编写 ArrayList,然后关闭 FileOutpoutStream 和 ObjectOutputStream。我在一个活动的一生中做了很多次。
对象是这样的:
public class Name implements Serializable{
private static final long serialVersionUID = 7526472295622776147L;
String name;
int id;
public Name (String name, int id){
this.name = name;
this.id = id;
}
public String getName(){
return this.name;
}
public String getId(){
return this.id;
}
当我想检索它时,我创建了一个 Name 对象的新 ArrayList 并使用 ObjectInputStream 添加元素
ArrayList<Name> array = new ArrayList<Name>();
array.addAll((ArrayList<Name>)ois.readObject());
我避免做
array = (ArrayList<Name>) ois.readObject();
我以为不会有这种方式的参考。
然后我关闭 FileInputStream 和 ObjectInputStream。我也在活动的生命周期中多次这样做。
当我用 Eclipse 检查 MAT 时,直方图显示内存包含许多 Name 对象,因此阻止了活动以破坏它们自己。
我尝试在关闭它们之前重置()流,我也尝试了相反的方法,尝试仅在不关闭的情况下重置(),我尝试了相同的 onDestroy(),但是每个操作都会导致异常和不需要的行为。
更改序列号不起作用,它不会写入或给出异常,因此序列号似乎必须保持静态并且不得删除。
考虑到这个 ArrayList 必须存储在存储中并与不同的活动共享,我应该如何处理这个问题?我应该使用 SharedPreferences 还是其他什么?