• 自定义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();
    
  • 相关阅读:
    红黑树的插入操作详解
    Java实现红黑树
    No-sql之redis常用命令
    如何配置JedisPool的参数
    JedisPool使用注意事项
    2-SAT问题的小结
    BZOJ 2142 礼物 组合数学 CRT 中国剩余定理
    BZOJ 4521 CQOI 2016 手机号码 数位DP
    BZOJ 4380 Myjnie 区间DP
    BZOJ 2754 SCOI 2012 喵星球上的点名 后缀数组 树状数组
  • 原文地址:https://www.cnblogs.com/loaderman/p/6509524.html
Copyright © 2020-2023  润新知