解決策を検索しましたが、見つかりませんでした。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 を使用する必要がありますか?