Tratamento de exceção global de aplicativos de desenvolvimento Android

Ao fazer o desenvolvimento do projeto Android, todos sabem que, se o programa cometer um erro, uma caixa pop-up de saída forçada aparecerá. Isso não é um problema em si, mas esta IU é realmente feia, sem mencionar que os usuários não podem aceitá-la, nem mesmo nós. Pode não ser aceitável. Embora sempre passemos por testes cuidadosos ao lançar o programa, inevitavelmente encontraremos erros inesperados.

Hoje irei customizar o tratamento de um erro de programa, semelhante ao travamento do iphone. (Embora a falha não seja o que os usuários desejam ver, é obviamente muito melhor do que a janela pop-up nativa em termos de experiência do usuário)

Sem muita bobagem, basta ir ao código:

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);  
    }  
}

Registre-se em 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>

Nesse ponto, você pode testar se, quando ocorrer um erro, o programa fará um flashback direto e encerrará o processo em segundo plano. Claro, você também pode personalizar alguns prompts de IU de erro amigáveis ​​para aprimorar ainda mais a experiência do usuário.


    Acho que você gosta

    Origin blog.csdn.net/xhf_123/article/details/49932767
    Recomendado
    Clasificación