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


ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常。本文作为学习笔记,记录了使用Global.asax文件的Applicati...
  • pingqingbo
  • pingqingbo
  • 2017年02月28日 09:44
  • 2363

springmvc三种全局异常处理

其实自己一直有想把自己的项目弄的越简洁越好,不用把项目中每个方法看起来比较臃肿,所以自己没事就去论坛,博客看别人怎么整合 今天特意写一些自己上个项目中用到的异常全局拦截处理 springmvc有三...
  • u014209975
  • u014209975
  • 2016年08月25日 10:45
  • 3339

【SpringMVC整合MyBatis】springmvc异常处理-全局异常处理器开发

异常处理 1.异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。 ...
  • u013517797
  • u013517797
  • 2015年08月13日 08:54
  • 9745

Android全局异常处理 实现自己定义做强制退出和carsh日志抓取

在做android项目开发时,大家都知道都会遇到,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序时总会...
  • sk719887916
  • sk719887916
  • 2014年10月28日 20:23
  • 1776

SpringBoot全局异常处理

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • tianyaleixiaowu
  • tianyaleixiaowu
  • 2017年04月12日 17:18
  • 6779

Android中application的使用-------传递全局参数

我们在android中在activity中进行参数传递一般使用intent来进行,或者也可以通过建立bundle来设置键值对,然后还是通过intent(bundle)来进行参数传递,但是这种方法有所不...
  • u014482758
  • u014482758
  • 2015年02月06日 19:47
  • 1222

项目全局异常处理

使用HandlerExceptionResolver接口
  • hweixing123
  • hweixing123
  • 2014年10月30日 11:23
  • 325

SpringBoot学习——全局异常处理设置(返回JSON)

SpringBoot学习——全局异常处理设置(返回JSON) 使用@ControllerAdvice注解 使用@ExceptionHandler注...
  • flygoa
  • flygoa
  • 2017年07月18日 11:08
  • 5665

springmvc全局异常处理

对于springmvc全局异常处理有三种方式, 1.使用SimpleMappingExceptionResolver实现异常处理 2.实现HandlerExceptionResolver 接口自...
  • Petershusheng
  • Petershusheng
  • 2016年09月01日 11:13
  • 1993

springMVC --全局异常处理(两种方式)

首先看springMVC的配置文件: errors/error...
  • u014034854
  • u014034854
  • 2015年08月01日 00:44
  • 11916
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发 Application 全局异常处理
举报原因:
原因补充:

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