自定义application的全局捕获异常实现

package com.loaderman.global;

import android.app.Application;
import android.os.Environment;

import com.squareup.leakcanary.LeakCanary;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

/**
 * 自定义application
 * 使用前需要进行配置
 * <application android:name=.MyApplication"
 * >
 * <p>
 * 特性: 整个app的入口; 整个app只有一个application实例
 * <p>
 * 1. 全局初始化操作
 * 2. 定义全局的方法, 声明全局变量
 */

public class MyApplication extends Application {

    //应用被创建
    @Override
    public void onCreate() {
        super.onCreate();

        System.out.println("应用被创建");

        //捕获全局异常
        //设置未捕获异常的处理器
        Thread.setDefaultUncaughtExceptionHandler(new MyHandler());

      
    }

    //定义全局的方法
    public void doSomething() {
        System.out.println("doSomething");
    }

    class MyHandler implements Thread.UncaughtExceptionHandler {

        //如果系统出现未捕获异常, 就会走到此方法中, 然后进行全局处理
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            //Throwable: exception和error的父类
            ex.printStackTrace();
            System.out.println("发现一个未处理的异常, 但是被哥捕获了...");

            //将错误日志输出到本地文件中--->自动上传到服务器
            //第三方平台: 友盟统计
            try {
                PrintWriter writer = new PrintWriter(new FileOutputStream(Environment
                        .getExternalStorageDirectory().getAbsolutePath() + "/err11.log"));
                ex.printStackTrace(writer);
                writer.flush();
                writer.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            // ex.printStackTrace();
            //及时退出app
            //System.exit(0);//java中结束当前进程方法
            //闪退
            android.os.Process.killProcess(android.os.Process.myPid());//android中杀死当前进程的方法
        }
    }
}

 在其他地方调用全局方法:

      //调用自定义application的方法
        MyApplication app = (MyApplication) getApplication();
        app.doSomething();

 

posted on 2017-03-06 13:21  LoaderMan  阅读(171)  评论(0编辑  收藏  举报

导航