2011-12-19 10 views
5

私は静的変数に関する問題に直面しています。私は自分のプロジェクト全体に使用しています(ファイルのいくつかのフィールドを含んでいます)。この変数は、必ずしもそうではないが、場合によってはその価値を失う。 静的変数のライフサイクルについて、私が3つのケースで値を失ったことを読みました:静的変数の値が失われる

1)クラスがアンロードされました。

2)JVMがシャットダウンします。

3)プロセスが終了します。

私は質問があります:アクティビティonResumeを書き直してファイルを再度解析し、nullの場合は静的変数をもう一度入力するだけでは不十分ですか?

+2

あなたが試した関連コードを投稿してください。 – Lion

+0

答えに感謝しますが、アプリケーションでは、アプリケーションがバックグラウンドになると、私の価値が失われているようです... –

答えて

2

実際に静的/グローバルを使用する必要がある場合は、カスタムクラスに入れてください(Application)。このように:

public class FooApplication extends Application { 
    protected Bar myBar; 

    public Bar getBar() { return myBar; } 
    public void setBar(Bar bar) { myBar = bar; } 
    ... 
} 

マニフェストを使用してカスタムアプリケーションクラスを使用することを宣言します。

<application 
    android:icon="@drawable/ic_launcher_noteit1" 
    android:label="@string/app_name" 
    android:theme="@style/App_Theme" 
    android:name="FooApplication" 
    android:debuggable="true"> 

(FooApplication) getApplication()を使用して、任意のアクティビティからアプリケーションオブジェクトにアクセスできます。これはお勧めの方法ではないことに注意してください。推奨される方法は、シングルトンパターンを使用することです。

ファイルの解析が高価な操作の場合は、すべてonResumeで解析したくない場合があります。代わりに、使用することを検討することをお勧めします。onRetainNonConfigurationInstance()

1

私はあなたが誤ってその変数を自分でリセットしていないことを確認したいと思います。このためには、例えばgetMyVariable()setMyVariable()の関数を作成し、それらにいくつかのロギングを入れて、変数に直接アクセスするのではなくそれらを使用することができます。

関連する問題