Android 應用設置全局Exception處理事件的方法

通常情況下,如果Android應用出現未處理的異常,會出現下面類似的對話框,然後強制退出該應用:

 

如果你想改變這種缺省的行為,比如出現未處理異常時顯示自定義對話框,或是重啟該應用,可以使用下面步驟重定義Android全局異常處理事件。

1. 實現Thread.UncaughtExceptionHandler 接口

一般可以通過派生Application類並實現Thread.UncaughtExceptionHandler 方法:

[java] 
public class GNavigatorApplication extends Application 
  
implements   Thread.UncaughtExceptionHandler { 
  
… 
  

public class GNavigatorApplication extends Application
 
implements   Thread.UncaughtExceptionHandler {
 

 
}

2. 定義Thread.UncaughtExceptionHandler方法

比如重啟某個Activity

[java] 
public void uncaughtException(Thread thread, Throwable ex) { 
  
Intent intent = new Intent(this, GNavigatorActivity.class); 
  
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP    | Intent.FLAG_ACTIVITY_NEW_TASK); 
  
startActivity(intent); 
  

public void uncaughtException(Thread thread, Throwable ex) {
 
Intent intent = new Intent(this, GNavigatorActivity.class);
 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP    | Intent.FLAG_ACTIVITY_NEW_TASK);
 
startActivity(intent);
 
}

3. 重置缺省的Exception處理函數,比如可以在OnCreate方法重設Exception處理方法。

[java]
@Override 
  
public void onCreate() { 
  
… 
  
Thread.setDefaultUncaughtExceptionHandler(this); 
  

@Override
 
public void onCreate() {
 

 
Thread.setDefaultUncaughtExceptionHandler(this);
 
}

這樣在應用中出現未處理異常時,會自動重啟應用,而不會出現Force Close對話框。

 作者:mapdigit
 

發佈留言