私はこれについて混乱しています。android を開始したばかりで、オブジェクトをまとめるために複数のアクティビティを必要とする長いフォームがあります。オブジェクトをアクティビティからアクティビティに渡してビルドしたいと思います。多くの投稿やブログ、Android Dev ページを読んだ後、非永続データのようです。最善の策は、アプリケーションをサブクラス化するか、シングルトンを作成することです。この投稿openFileOutput がシングルトン クラス内で適切に機能しないことを確認しました - アイデア/回避策? そして今、私の質問はこれです.シングルトンがリサイクルされないのはなぜですか? アクティビティ A で createSingleton() を実行してからアクティビティ B に移動し、シングルトンへの参照を渡さない場合、ガベージ リサイクラーは、再びシングルトンに戻ることをどのように認識しますか? アクティビティAがリサイクルされ、アクティビティBに移動すると、シングルトンが死ぬように思えます..
次のシングルトンを見ると..
public final class SomeSingleton implements Cloneable {
private static final String TAG = "SomeSingleton";
private static SomeSingleton someSingleton ;
private static Context mContext;
/**
* I'm private because I'm a singleton, call getInstance()
* @param context
*/
private SomeSingleton(){
// Empty
}
public static synchronized SomeSingleton getInstance(Context context){
if(someSingleton == null){
someSingleton = new SomeSingleton();
}
mContext = context.getApplicationContext();
return someSingleton;
}
public void playSomething(){
// Do whatever
mContext.openFileOutput("somefile", MODE_PRIVATE); // etc...
}
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException("I'm a singleton!");
}
}
そして、getInstance() を介してそのインスタンスを作成します。クラスは、クラスの単一のインスタンスを静的フィールド someSingleton に配置します。このインスタンスがリサイクルされないのはなぜですか? 答えが「静的フィールドは決してリサイクルされないのですか?」メモリがたくさんある場合、メモリをすべて使い切らないのはなぜですか? シンプルなデザインの考慮事項?提供された多くのライブラリを使用している場合、静的フィールドがいくつあるかわからない場合、これは危険に思えます。私は初心者としてOOPに欠けているいくつかの基本的なルールがあると感じています。