自定义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();
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!