2012-01-14 7 views
1

私は、Java言語に関する質問があります:アンドロイドJava System Classはプロセス間で共有されますか?

に私はその後、プロセスB

を(私は多分それは再びすべてのSystem.propertiesを初期化するの思考)を活性化する、プロセスAの内側System.property Xを変えてみました

(予想通り、プロセスBが変更System.property Xを見ていない)、

は、私は最初のプロセスを再開し、変更System.propertyがまだあることを見ました。

私はSystemクラスをインスタンス化できないことを知っています。これが当てはまるので、

私はそれがすべてのプロセスの間で共有されると考えました。

これは該当しません。

私はこれがなぜ起こりたいのか理解していますが、Systemクラスがインスタンス化されていない場合、どのようになりますか? Javaのどのメカニズムがこの動作を引き起こしますか?ヘルプJavaでどのようなメカニズム

+0

標準的なJava環境では、Android環境(特に非標準です)については何も言いませんが、別々のシステムプロセス間で共有アドレス指定はありません。ほとんどのシステムでは、それぞれの "プロセス"には独自のアドレス空間があり、他のプロセスのアドレス空間とは離れているので、共有はできません。 Javaはそのように定義しているので、 'System'はインスタンス化できません。何らかの共有のためではありません。 –

答えて

1

ため

おかげで、この動作の原因は?

Systemクラスバイトコードは、任意シングルトンデータSystemクラス(または任意の他のAndroid OSのJavaクラス)によって保持されるかもしれないこと、のDalvik仮想マシンプロセス間で共有されている間のDalvik仮想マシンプロセス間で共有されていません。むしろ、このようなオブジェクトは、ローカルプロセスのヒープ上でインスタンス化されます。他のオブジェクトとは異なります。

+0

素早い返信をありがとう、あなたはどこで私はアンドロイドのソースコードでそれを見つけることができますか? – nir

+0

@nir:「それ」とは何ですか? – CommonsWare

+0

Dalvik VMプロセスが初期化され、 "そのようなオブジェクトがローカルプロセスのヒープでインスタンス化される" ... – nir

0

あなたが知っているように、Androidは何か他のもののためのリソースが必要と判断するまであなたの活動を保持しています。だから"最初のプロセスを再開し、変更されたSystem.propertyがまだそこにあることが分かりました"あなたのデスクトップ上のウィンドウを切り替えるかのように、あなたが残したままの状態を得ることもできます。

関連する問題