4

私には2つの異なる活動があります。最初のものは2番目のものを起動します。

Intent intent = new Intent(this, Activity2.class);
startActivity(intent);

2番目のアクティビティでは、System.exit(0)を呼び出します。最初のアクティビティは「ページスタック」が原因で戻ってくると思います。しかし、私は2つのことが起こったことを発見しました。

  1. 進行中のバリアントはその価値を失いました。(進行状況の再開だと思います)
  2. 最初のアクティビティで作成され、2番目のアクティビティでデータが追加され、保存されたファイルが失われました!(サンドボックスから消去されました)。を使用して作成したファイルapplicationContext.openFileOutput(fileName, Context.MODE_PRIVATE);

その状況でサンドボックスは掃除されましたか?'リターンキー'による通常の終了、またはandroid.os.Process.killProcess(android.os.Process.myPid())サンドボックス内のファイルは保持されました。では、System.exit(0)を実行すると、実際に何が起こったのでしょうか。

ありがとう!

4

4 に答える 4

9

できることは 1 つあります。

System.exit (0);を使用しないでください。代わりに、次のようにfinish( ) を使用できます。

Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
finish();

ここでデータは失われません.HTH :)

于 2012-02-07T07:22:45.097 に答える
2

System.exit(0) を実行するとどうなりますか?

VM はそれ以上の実行を停止し、プログラムは終了します。

さて、あなたの場合、アクティビティスタックのために最初のアクティビティが戻ってきます。したがって、 を使用してあるアクティビティから別のアクティビティに移動するときIntentfinish()、現在のアクティビティを次のように実行します。

Intent intent=new Intent(getApplicationContext(), NextActivity.class);
startActivity(intent);
CurrentActivity.this.finish();

これにより、アプリケーションを閉じたときにアクティビティが実行されないことが保証されます。

アプリケーションを終了するには、次のコードを使用します。

MainActivity.this.finish();          
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
getParent().finish();

またSystem.exit()、アプリケーションがバックグラウンドで曲を再生するミュージック プレーヤーやバックグラウンドでインターネット データを使用するアプリケーション、またはアプリケーションに依存するウィジェットなどのリソースをバックグラウンドで使用する場合は、使用しないでください。

詳細については、次の参考文献を参照してください。

  1. アプリケーションを終了することは眉をひそめていますか?
  2. http://android-developers.blogspot.in/2010/04/multitasking-android-way.html
于 2013-07-25T08:03:44.510 に答える
1

ドキュメントを読む:

http://developer.android.com/reference/java/lang/System.html#exit(int )

于 2012-02-07T07:47:25.300 に答える