2011-08-10 36 views
1

"グローバル"情報を格納するためにandroid.app.Applicationクラス(サブクラス)を使用しています。 GPS/wifiから最後に取得したユーザーの場所の例です。私の質問は、私が静的変数またはインスタンス変数としてこれらの "グローバル"を格納する必要があるかどうかです。どんなシナリオが良いか正確かはわかりません。Androidアプリケーションクラスグローバルインスタンスまたは静的

シナリオA:静的変数を使用して -

public class MyApplication extends android.app.Application { 

    private static Location myLocation; 
    public static Location getLocation() { 
     return myLocation; 
    } 
    public static void setLocation(Location loc) { 
     myLocation = loc; 
    } 
} 

シナリオA:使用 -

loc = MyApplication.getLocation(); 
MyApplication.setLocation(loc); 

シナリオB:インスタンス変数を使用して、 -

public class MyApplication extends Application { 

    private Location myLocation; 
    public Location getLocation() { 
     return this.myLocation; 
    } 
    public void setLocation(Location loc) { 
     this.myLocation = loc; 
    } 
} 

シナリオB:用法 -

loc = getApplication().getLocation(); 
getApplication().setLocation(loc); 

ありがとうございます。

+0

詳細は、私は、インスタンスと静的の間で一般的な概念を理解しています。とにかくアプリケーションサブクラスのインスタンスが1つしかないこのAndroidのケースでは特に質問しています。 – kharles

答えて

2

変数を使用すると、常に正しい状態になります。これは、単一の状態を維持したいからです。しかし、あなたがjavaによって提供されたSharedPreference()のようなものを持っているときに、なぜリスクを冒すのですか。これは、より安全で、いつでも確実に確認できます。あなたのアプリケーションのいたるところでそれを入手してください。通常は変数の状態を維持することは危険な作業です。

インスタンス変数を作成したさまざまなオブジェクト/インスタンスのために異なっている(だから彼らは、インスタンス変数と呼ばれている)ので、作成することにより、変数の値を取得しようとした場合の状態を維持するために、インスタンス変数を使用しての

問題新しいオブジェクトは、(別のインスタンスで設定されているので)望まないものを返します。static variableを使用すると、すべてのインスタンス/オブジェクトが同じ変数を参照しています(つまり、同じメモリ位置を意味します)。どのインスタンスでもアプリケーションに反映されますが、どのようにアクセスするかは関係ありません。

関連する問題