注: これまで (9 月 6 日) に提供された 2 つの回答は興味深いものですが、残念ながら質問には対応していません。
私の Android テスト デバイスの 1 つに HTC One X があります。このデバイスは、バックグラウンド アプリケーションを頻繁に強制終了することで知られています (最も腹立たしいことに、ランチャーも含めて)。これは、おそらく HTC ブロートウェアが原因で、RAM 割り当てに関して限界に達しがちなためです。しかし、私の目的のためには、これは非常に役に立ちました。さまざまなメモリ不足の状況の影響を強調し、そのようなイベントに対処するためにアプリケーションを改善できるからです。たとえば、私が学んだことの 1 つは、バックスタックが保持されていても、Application
インスタンスやその他のstatic
リソースを強制終了できるということです。Activity
したがって、優れたユーザー エクスペリエンスを提供するために、アプリケーションを実行している単一のプロセスであっても、バックスタックを残すことができます。static
それは保持されています。このため、私のアプリケーションは、状態を適切にチェックし、必要に応じて再初期化を実行するという点で非常に頑丈になりましたActivity
。
私の特定の質問に移ると、コード検査を通じて、static
あるクラスのメンバーが強制終了され、その後再初期化されたことが原因であると思われるまれな症状が見られましたが、別の静的リソースのいずれかライブラリ クラスが再初期化されていません。2 つの別個のリソース間のこのような依存関係はstatic
、私の側の悪い設計を表していることを認識しており、これを回避するためにリファクタリングします。ただし、私の分析が正しいかどうかを知りたいです。つまり、バックスタックが保持されているが、特にライブラリ/パッケージごとに、一部のリソースのみが強制終了されているという状況は可能ですか? static
編集 1関連する 2 つのクラスについてもう少し詳しく説明します。
クラス 1 は、 と呼ぶクラスController
です。シングルトンとしては使用されませんが、すべてのインスタンスで共通のデータが含まれていますstatic
Map
。次のように初期化されます。
private static Map<String, String> sSomeMetaData;
static {
sSomeMetaData = new HashMap<String, String>();
}
次に、 というクラスがありMyFlyweightFactory
ます。このクラスは別のライブラリにあります。このクラスはシングルトンです:
private static MyFlyweightFactory instance = new MyFlyweightFactory();
public static synchronized MyFlyweightFactory getInstance(){
return instance;
}
private MyFlyweightFactory(){ }
TreeMap<String, MyParserRenderer> images = new TreeMap<String, MyParserRenderer>();
さて、ここに依存関係があります。ファクトリ クラスには、ファイル システムからファイルを解析することによって構築される特定の名前付きイメージ オブジェクトを取得する getter メソッドがあります。工場出荷時の初期化以降、工場がその画像を要求されていない場合、工場はファイルからそれを解析します (実際には私の SVG 画像パーサー ライブラリです)。画像はオブジェクトに解析されMyParserRenderer
ます。この画像の解析が行われると、ファクトリはController
クラスのsSomeMetaData
メンバーにもいくつかのデータを取り込みます。工場が保持しているすべての画像は、上に表示されているimages
メンバーに保持されTreeMap
ます。static
したがって、これらのイメージはシングルトン ファクトリ インスタンスの非静的メンバーです。
まれな問題の状況は、 findからいくつかのオブジェクトを提供したことを知っていても、空であるController
findのインスタンスのようです。これは確かに のインスタンスが残っていて、画像オブジェクトを再解析する必要がなかった場合にのみ発生する可能性があります (つまり、二度と読み込まれないことを意味します) 。再度実行。コードの他の場所で編集されていないことを確認できます。sSomeMetaData
MyFlyweightFactory
Map
MyFlyweightFactory
sSomeMetaData
static
Controller
sSomeMetaData
clear()