1

我搜索了一个解决方案,但没有找到。我将包含我的 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 还是其他什么?

4

0 回答 0