2010-12-16 52 views
1

我有一個大的android應用程序,最近我看到,在任何未捕獲的異常,DDMS Logcat中顯示異常,並在調用父活動獲取重新啓動(onCreate得到的調用)之後。理想情況下,應用程序應該退出。未捕獲異常重新啓動調用活動?

我們正在使用ARCA崩潰應用程序報告,但發表了評論,並且仍然看到重新啓動的同一活動。我打電話給startActivityForResults,並且Android清單對於活動以及子活動都有android:finishOnTaskLaunch true。

任何可能導致異常活動重新啓動的指針?

回答

2

我相信這是力量關閉的預期行爲。用戶在得到異常信息時會得到通知,當他們確認系統試圖使其回到儘可能接近其當前狀態時,即最後一次有效的活動時。

我不知道爲什麼這種行爲不會被期望,但是您可能需要想出自己的方法來認識到由於崩潰而重新啓動活動並立即退出onCreate。

編輯: 我只是把一個測試程序:

public class Activity1 extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button button = (Button)findViewById(R.id.button); 
     button.setText("test"); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Activity1.this, Activity2.class); 
       startActivityForResult(intent, 0); 
      } 
     }); 
    } 
} 

public class Activity2 extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     Button button = (Button)findViewById(R.id.button); 
     button.setText("test2"); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       throw new RuntimeException(); 
      } 
     }); 
    } 
} 

當你推的Test2按鈕,拋出異常。 Android顯示一個強制關閉對話框,當您在對話框中單擊確定時,它會將您帶回到測試。這就是我的默認行爲。

處理此問題的最佳方法是修復您的應用程序,使其永不拋出異常。

作爲最後的手段,您可以添加處理未捕獲異常的處理程序:uncaughtExceptionHandler。這可以防止強制關閉對話框顯示在第一位,所以你可以隨心所欲。

+0

Thanks Marya ...這不是Android應用程序的默認行爲。如果您嘗試任何示例應用程序併發生崩潰,應用程序將退出。我試圖在另一個簡單的應用程序中模擬案例,它「完全」崩潰。我正在尋找可能導致應用重新啓動的指針。 – bschandramohan 2010-12-17 19:47:43

+0

關於「爲什麼」,當活動重新啓動時,應用程序處於不良狀態,並且我不想在此時處理代碼中用於所​​有活動的無效狀態。關閉應用程序並允許acra/marketplace爲我報告異常似乎更好。 – bschandramohan 2010-12-17 19:48:58

+0

請參閱編輯....... – 2010-12-17 20:07:14