2012-02-07 9 views
4

私は2つの異なる活動をしています。最初のものが2番目のものを起動します。System.exit(0)が実行されるとどうなりますか?

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

私はSystem.exit(0)を呼び出します。 最初のアクティビティは「ページスタック」によって引き起こされたと思います。 しかし、私は2つのことが起こったことを発見しました。

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

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

ありがとうございます!

+0

代わりにfinish()を使用しないでください。 –

答えて

9

あなたは一つのことを行うことができます。

DONOT にSystem.exit(0)を使用します。次のように代わりにあなただけの仕上げ()を使用することができます。

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

をここでデータがloss.HTHではありません:)

+1

私は第2のアクティビティで 'System.exit(0)'を呼び出します。私はこれが良い方法ではないことを知っていますが、私がこれをしたらどうなるか知りたいだけです。 – Kane

+0

@JinZhangこれは、実行中のJVMを終了します。 –

+0

これによりファイルが失われますか? – Kane

2

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

VMは、さらに実行し、プログラムが終了となります停止します。

は今、あなたのケースで最初の活性は、アクティビティスタックに戻ってきます。あなたがIntentを使用して別のアクティビティから移動するときに、このような現在の活動のfinish()を行います。

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()を使用しないでください背景、またはあなたのアプリケーションに依存する任意のウィジェットです。詳細については

次の参考文献を経る:でSystem.exit(0)を実行するとき

  1. Is quitting an application frowned upon?
  2. http://android-developers.blogspot.in/2010/04/multitasking-android-way.html
+1

これで問題が解決しました。共有いただきありがとうございます。 –

0

だから、何が実際に起こったのか?

android.os.Process.killProcess(android.os.Process.myPid())およびSystem.exit(0)は同じである。あなたが2番目のアクティビティからそれらのいずれかを呼び出すと、アプリケーションは1つのアクティビティ(2つのアクティビティを持っていると仮定して)で閉じられ、再度開きます。この動作を確認するには、メインアクティビティのonCreateメソッドにlogging(Log.i("myTag", "MainActivity started");)を入れます。

関連する問題