Manejo de excepciones globales de aplicaciones de desarrollo de Android

Al hacer el desarrollo de un proyecto de Android, todo el mundo sabe que si el programa sale mal, aparecerá un cuadro emergente de salida forzada. Esto no es un problema en sí mismo, pero esta interfaz de usuario es realmente desagradable, y mucho menos el usuario no puede aceptarla, ni siquiera nosotros mismos. Puede que no sea aceptable. Aunque siempre pasamos por pruebas cuidadosas cuando lanzamos el programa, inevitablemente encontraremos errores inesperados.

Hoy, personalizaré el manejo de un error de programa, similar al bloqueo del iPhone. (Aunque el bloqueo no es lo que los usuarios quieren ver, obviamente es mucho mejor que la ventana emergente nativa en términos de experiencia del usuario)

No hay muchas tonterías, solo ve al 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);  
    }  
}

Regístrese en 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>

En este punto, puede probar que cuando ocurre un error, el programa retrocederá directamente y eliminará el proceso en segundo plano. Por supuesto, también puede personalizar algunas indicaciones de interfaz de usuario de error amigables para mejorar aún más la experiencia del usuario.


    Supongo que te gusta

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