2012-02-07 84 views
4

我有兩個不同的活動。第一次啓動第二個。當System.exit(0)執行時會發生什麼?

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

在第二個活動中,我調用System.exit(0)。 我認爲第一個活動是由'頁堆棧'引起的。 但我發現發生了兩件事。

  1. 該變體正在失去其價值。 (我認爲進度重啓)
  2. 在第一個活動中創建的文件,以及在第二個活動中添加的數據並保存,丟失!(從沙箱中刪除)。我創建的文件使用applicationContext.openFileOutput(fileName, Context.MODE_PRIVATE);

是否在這種情況下清理了沙箱?正常退出按'返回鍵'甚至是android.os.Process.killProcess(android.os.Process.myPid()),沙箱中的文件被保留。 那麼,當System.exit(0)執行時究竟發生了什麼?

謝謝!

+0

我不使用finish()來代替? – 2012-02-07 07:34:12

回答

9

你可以做一兩件事:

DONOT使用System.exit(0);,而不是你可以使用完成()如下:

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

這裏的數據不會被loss.HTH :)

+1

我在第二個活動中調用'System.exit(0)'。我知道這不是退出的好方法,但我只想知道如果我這樣做會發生什麼。 – Kane 2012-02-07 07:42:13

+0

@JinZhang它將終止正常運行的JVM。 – 2012-02-07 07:57:23

+0

這會導致文件丟失? – Kane 2012-02-07 08:09:59

2

當System.exit(0)執行時會發生什麼?

虛擬機停止進一步執行,程序將退出。

現在,在您的情況下,第一個活動由於活動堆棧而回來。所以當你從一個活動移動到另一個時,使用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()如果你的應用程序中使用像音樂播放的背景下,從背景中播放歌曲的任何資源或在使用互聯網數據的應用程序背景或依賴於您的應用程序的任何小部件。

欲瞭解更多信息,請通過以下參考資料:

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

這節省了我的問題。感謝您的分享。 – 2015-03-26 21:14:19

0

那麼,究竟發生了什麼時System.exit(0)執行?

android.os.Process.killProcess(android.os.Process.myPid())System.exit(0)是相同的。當您從第二項活動中調用其中的任何一項時,應用程序將被關閉,並且只有一項活動再次打開(我們假設您有兩項活動)。您可以通過將日誌記錄(Log.i("myTag", "MainActivity started");)置於主要活動的onCreate節點中來檢查此行爲。

相關問題