Android開發 Application 全局異常處理

在做android項目開發時,大家都知道如果程序出錯了,會彈出來一個強制退出的彈出框,這個本身沒什麼問題,但是這個UI實在是太醜了,別說用戶接受不了,就連我們自己本身可能都接受不了。雖然我們在發佈程序時總會經過仔細的測試,但是難免會碰到預料不到的錯誤。

今天就來自定義一個程序出錯時的處理,類似iphone的閃退。(雖然閃退也是用戶不願意看到的,但是在用戶體驗上明顯比那個原生的彈窗好多了)

廢話不多說,直接上代碼:

CrashHandler

/** 
 * 自定義的 異常處理類 , 實現了 UncaughtExceptionHandler接口  
 * 
 */  
public class CrashHandler implements UncaughtExceptionHandler {  
    // 需求是 整個應用程序 只有一個 MyCrash-Handler   
    private static CrashHandler INSTANCE ;  
    private Context context;  
      
    //1.私有化構造方法  
    private CrashHandler(){  
          
    }  
      
    public static synchronized CrashHandler getInstance(){  
        if (INSTANCE == null)  
            INSTANCE = new CrashHandler();  
        return INSTANCE;
    }

    public void init(Context context){  
        this.context = context;
    }  
      
  
    public void uncaughtException(Thread arg0, Throwable arg1) {  
        System.out.println("程序掛掉了 ");  
        // 在此可以把用戶手機的一些信息以及異常信息捕獲並上傳,由於UMeng在這方面有很程序的api接口來調用,故沒有考慮
          
        //幹掉當前的程序   
        android.os.Process.killProcess(android.os.Process.myPid());  
    }  

}

CrashApplication

/** 
 * 在開發應用時都會和Activity打交道,而Application使用的就相對較少了。 
 * Application是用來管理應用程序的全局狀態的,比如載入資源文件。 
 * 在應用程序啓動的時候Application會首先創建,然後纔會根據情況(Intent)啓動相應的Activity或者Service。 
 * 在本文將在Application中註冊未捕獲異常處理器。 
 */  
public class CrashApplication extends Application {  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        CrashHandler handler = CrashHandler.getInstance();  
        handler.init(getApplicationContext());
        Thread.setDefaultUncaughtExceptionHandler(handler);  
    }  
}

在AndroidManifest.xml中註冊

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="org.wp.activity" android:versionCode="1" android:versionName="1.0">  
    <application android:icon="@drawable/icon" android:label="@string/app_name"  
        android:name=".CrashApplication" android:debuggable="true">  
        <activity android:name=".MainActivity" android:label="@string/app_name">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
    </application>  
    <uses-sdk android:minSdkVersion="8" />  
</manifest>

至此,可以測試下在出錯的時候程序會直接閃退,並殺死後臺進程。當然也可以自定義一些比較友好的出錯UI提示,進一步提升用戶體驗。


發佈了17 篇原創文章 · 獲贊 18 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章