2015-09-29 45 views
1

我的OnCreate方法(在MainActivity):異常在一個活動不停止其他活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, DetailsActivity.class); 
      startActivity(intent); 

      // This will throw exception 
      Integer.parseInt("Güzelim"); 
     } 
    }); 
} 

當一個按鈕被點擊時,應用程序崩潰;顯示對話框「不幸的應用程序已停止」。當點擊OK按鈕時,將顯示DetailsActivity屏幕。爲什麼會發生?我希望整個應用程序崩潰。

+1

call Integer.parseInt(「Güzelim」);在開始您的活動之前 – Aakash

+0

通過在創建方法中使用try catch來處理此異常 – Satyavrat

回答

0
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 


findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
      // This will throw exception 
     Integer.parseInt("Güzelim"); 

     Intent intent = new Intent(MainActivity.this, DetailsActivity.class); 
     startActivity(intent); 
    } 
}); 
} 

這應該會導致您的整個應用程序崩潰。

+0

謝謝我明白,但我希望有人解釋爲什麼我的代碼工作原理如何。我的意思是爲什麼幕後發生?每個活動是在單獨的流程中運行還是什麼?我只是不明白爲什麼整個應用程序不會崩潰,但只是它的一部分(MainActivity)。 – Egis

0

應用程序崩潰是因爲您試圖將字符串轉換爲引發NumberFormatException的Integer。

0

This answer到類似的問題可能會幫助

例如,用戶可能會瀏覽網頁,點擊一個YouTube鏈接 推出YouTube應用,然後點擊分享按鈕,推出他們的 喜愛的社交網絡應用程序併發布視頻鏈接。這是全部 部分相同的任務;如果用戶多次按下,則他們將 返回到它們從其開始的瀏覽器中的頁面。

一旦你開始了社交網絡應用程序時,系統可能會決定 ,它的內存不足,它會殺了斷 瀏覽器的過程中,以騰出更多。 (畢竟,它不在前面,用戶不會注意到 )。當用戶按下返回按鈕到 返回到瀏覽器活動時,它將重新啓動並重建用戶離開它的最後狀態( )。在最壞的情況下,用戶會在重新初始化時遇到短暫的延遲。

但這同樣的事件在還原以前的活動狀態 甚至可以在在相同的工藝相同的應用程序發生的順序。在您的 方案中,由於崩潰導致活動B關閉。因此,該系統 不正是它總是這樣 - 它返回到以前的 活動:活動A.但活動A的過程中是不是仍然存在(它 崩潰!),所以在系統重新啓動它,它可以重建其 以前的狀態。

討論的焦點:作爲一種哲學,Android試圖讓所有的應用程序始終在運行,作爲這一哲學的一部分,它試圖從最大的可能點恢復。