Android開発アプリケーションのグローバル例外処理

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プロンプトをカスタマイズして、ユーザーエクスペリエンスをさらに強化することもできます。


    おすすめ

    転載: blog.csdn.net/xhf_123/article/details/49932767