android 捕获应用异常并保存入日志文件中
2016-11-14 15:24
477 查看
本文参考了:http://blog.csdn.net/kevinmeng_ini58/article/details/7440810
首先这样做的好处是,当用户的手机运行我们的应用奔溃了的时候,我们可以向他要奔溃日志,来解决一些问题,这个很有用。
先上主要代码:
使用方式是:
实现一个自己的application:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CrashHandler.newInstence().init(this);
}
}
注册,我们自己的异常捕获类,就行了。
还有要注意的一点是,因为涉及到了,写文件操作,所有,需要权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
首先这样做的好处是,当用户的手机运行我们的应用奔溃了的时候,我们可以向他要奔溃日志,来解决一些问题,这个很有用。
先上主要代码:
public class CrashHandler implements UncaughtExceptionHandler { private Context mContext; private UncaughtExceptionHandler mHandler; private static CrashHandler crashHandler; public static final String HOME_FILE = Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"TestLog"+File.separator; private CrashHandler(){} public static CrashHandler newInstence(){ if (crashHandler == null) { synchronized (CrashHandler.class){ if (crashHandler == null) { crashHandler = new CrashHandler(); } } } return crashHandler; } /** * 初始化信息 * @param context */ public void init(Context context){ mHandler = Thread.getDefaultUncaughtExceptionHandler(); mContext = context; Thread.setDefaultUncaughtExceptionHandler(this); } @Override public void uncaughtException(Thread thread, Throwable ex) { if (!handlerException(ex) && mHandler != null) { mHandler.uncaughtException(thread,ex); }else{ android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } } public boolean handlerException(Throwable ex){ if (ex == null) { return false; } ex.printStackTrace(); changeExceptionToFileInfo(ex); return true; } public void changeExceptionToFileInfo(Throwable ex){ String logName = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + ".log"; String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); StringWriter sw = new StringWriter(); sw.append(date).append("\n"); PackageManager packageManager = mContext.getPackageManager(); try { PackageInfo pi = packageManager.getPackageInfo(mContext.getPackageName(), 0); String versionName = pi.versionName; int versionCode = pi.versionCode; sw.append("r_" + "vn " + versionName + "_vc " + versionCode + "\n"); sw.append(android.os.Build.BRAND + " " + android.os.Build.MODEL + " Android " + android.os.Build.VERSION.RELEASE + "\n"); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } ex.printStackTrace(new PrintWriter(sw)); sw.append("*******************************************************").append("\n"); sw.append("*******************************************************").append("\n"); printToFile(logName,sw); } public void printToFile(String fileName,StringWriter sw) { File file = new File(HOME_FILE, fileName); FileWriter fw = null; try { File homeDir = new File(HOME_FILE); if (!homeDir.exists()) { homeDir.mkdirs(); } if (!file.exists()) { file.createNewFile(); } fw = new FileWriter(file,true); fw.write(sw.toString()); fw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { if (fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
使用方式是:
实现一个自己的application:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CrashHandler.newInstence().init(this);
}
}
注册,我们自己的异常捕获类,就行了。
还有要注意的一点是,因为涉及到了,写文件操作,所有,需要权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
相关文章推荐
- Android项目中异常捕获及对应Log日志文件保存
- Android编程实现项目中异常捕获及对应Log日志文件保存功能
- Android全局捕获崩溃异常记录日志保存至本地并定时删除
- android捕获异常并保存到sd卡文件目录里
- Android全局捕获崩溃异常记录日志保存至本地并定时删除
- Android全局捕获崩溃异常记录日志保存至本地并定时删除
- android app记录运行日志 捕获奔溃异常 ,存储日志到文件
- Android 全局异常捕获器 保存log日志本地
- android app记录运行日志 捕获奔溃异常 ,存储日志到文件
- Android全局捕获异常并生成崩溃日志文件的工具类
- Android全局捕获崩溃异常记录日志保存至本地并定时删除
- Android应用崩溃后异常捕获并重启并写入日志
- Android将应用log信息保存文件
- Android应用崩溃后异常捕获并重启
- Android小技巧(一):实现捕获应用的运行时异常
- 自定义未捕获异常时输出的日志为空或日志文件没有生成
- android logcat日志保存到文件中
- 请问能否把程序运行时出现的异常堆栈信息也保存进log4j指定的日志文件中
- Android将应用log信息保存文件
- Android将应用log信息保存文件