2016-03-22 10 views
2

私のAndroidアプリケーションでは、私は奇妙なバグがあります。以下のようなインスタンス変数は、実行時に予期せずデフォルト値に割り当てられます(この場合はfalse)。このタイプの変数はいつアンドロイドのアクティビティで初期化されますか?アクティビティのインスタンス変数はいつ初期化されますか?

public class MainActivity extends Activity { 
    private boolean isInitialized = false; // <- When do this variable get initialized? 
} 
+0

このアクティビティをその時点で呼び出すと、初期化されます。 –

+0

ランタイムは?正確に? – jaibatrik

+4

「このアクティビティと呼ぶ」とはどういう意味ですか?あなたは活動のonCreateを意味しますか? –

答えて

3

Javaのインスタンス変数は、インスタンスの作成時に初期化されます。

ほとんどの場合、オブジェクトはnewでインスタンス化されます。

アクティビティの場合は、リフレクションを使用してAndroidフレームワークによってインスタンス化されます(Instrumentation#newActivity()を参照)。その後、Contextの初期化が実行され、アクティビティonCreate()がインスタンスで呼び出されます。

詳細はActivityThread sourceをご覧ください。

0

Javaには「グローバル変数」がありません。

あなたは話していますinstance variablesです。これらは、新しいインスタンスが作成されるたびに初期化されます。

+0

はい、私は理解しますが、活動についてはどうですか?コンストラクタを使用して初期化されることはありません。私は彼らが初期化されるとき、特定のアクティビティライフサイクルメソッドがあるかどうかを知りたい。私はメソッドの外に割り当てられた変数について話しています。 –

+1

ライフサイクル活動を理解するためのコードをデバッグすることができます。このリンクを使用すると、次のようなメリットがあります。https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html –

+0

" "?あなたは "メソッドの外で宣言された"、インスタンス変数を意味します。 – Stultuske

関連する問題