Android开发 Application 全局异常处理

转载 2015年11月19日 19:45:00

在做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提示,进一步提升用户体验。


在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框

开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设 备上导致崩溃的信息,这对于下一个版本的 BUG 修复帮助极大,所以今天就来介绍一下如何在程序...

Android自定义捕获Application全局异常

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了...
  • jdsjlzx
  • jdsjlzx
  • 2012年05月27日 13:16
  • 45335

捕获Application全局异常

在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值) 在Android应用开发中,偶尔会因为某些异常导致正在使用的应用出现异常...

android 中处理崩溃异常并重启程序

有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决...
  • CYM_LMY
  • CYM_LMY
  • 2014年04月29日 11:39
  • 37690

Android Application详解和使用

Android Application详解和使用 能爬上金字塔顶峰的只有两种动物,雄鹰和蜗牛,我既然做不了雄鹰,就做一只蜗牛吧。 研究一个新的东西,从哪几方面开始,我觉得可以从这几方面: 它是什...

Android进阶——Crash异常捕获并发送到服务器

Crash异常捕获并发送到服务器在项目中,我们常常会遇到Crash的现象,也就是程序崩溃的时候,这个时候最常看到的就是这个界面如果你的项目已经发布到市场上了,这样的崩溃对于开发人员是看不到的,所以我们...

ARGB 颜色取值与透明度搭配

寻章摘句,总结一下。 //透明度;alpha 取值对照 100% — FF 95% — F2 90% — E6 85% — D9 80% — CC 75% — BF 70% — B3 65% — ...

android 全局异常处理

  • 2012年06月27日 15:22
  • 53KB
  • 下载

Android开发中三星手机拍照异常处理

今天在做开发的时候,遇到了一个比较严重的BUG。就是程序中上传图片功能在调用手机拍照时,其它手机都没问题。唯独三星手机(N9008s)拍照时程序直接崩溃。三星手机与其它手机拍照时唯一的区别是三星手机在...
  • true100
  • true100
  • 2016年01月14日 17:37
  • 2469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发 Application 全局异常处理
举报原因:
原因补充:

(最多只允许输入30个字)