Android でのガベージ コレクションに関して、予期していなかった動作が見られます。
App という名前のアプリケーションを拡張し、マニフェストを変更したクラスがあります。
<アプリケーション android:name=".App" ...
私はこれを以前に使用して、便宜上静的メソッドを介してアプリケーションコンテキストを取得できるようにしましたが、アプリケーション全体がガベージコレクションされたときにのみガベージコレクションする必要がある、小さくても重要な情報を保存することもできます。この情報は、初期化されたシングルトン オブジェクトに格納され、アプリケーション クラスに参照が格納されます。
public class App extends Application {
Context mContext;
Info info;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
info = Info.getInstance();
this.setTheme(R.style.MyTheme);
}
public static Context getContext(){
return mContext;
}
}
Info が初期化されると、単純なメンバー オブジェクトも初期化されます。
public class Info {
public Profile profile;
(...)
private Info() {
profile = new Profile();
}
(...)
}
私が経験した問題は、アプリが一時停止され、メモリを集中的に使用する別のアプリを実行すると (ガベージ コレクションを強制するため)、アプリに戻ると、プロファイル var にアクセスしようとすると NullPointerException が発生することです。
Info.getInstance().profile
アプリケーションが「Info」シングルトンへの参照を保持しているという事実と、シングルトンが「プロファイル」への参照を保持しているという事実は、ガベージコレクションを取得しないようにするべきではありませんか?
どんな助けでも大歓迎です。ありがとう!