android 记录崩溃日志
2019独角兽企业重金招聘Python工程师标准>>>
每个android应用都是由一个Application和多个activity或者server构成.应用启动时,会首先启动Application.在Application的onCreate方法中调用
Thread.setDefaultUncaughtExceptionHandler(handler);
就可以捕获导致应用崩溃的错误信息了.
首先应用要有读写sd卡权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
自定义一个Application,并在AndroidManifest.xml中使用这个Application
<applicationandroid:name=".MyApplication">...
</application>
public class MyApplication extends Application {private static final String LOG_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + "/oldfeel/log/";private static final String LOG_NAME = getCurrentDateString() + ".txt";private ArrayList<Activity> list = new ArrayList<Activity>();@Overridepublic void onCreate() {super.onCreate();Thread.setDefaultUncaughtExceptionHandler(handler);}UncaughtExceptionHandler handler = new UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread thread, Throwable ex) {writeErrorLog(ex);Intent intent = new Intent(getApplicationContext(),CollapseActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);exit();}};/*** 打印错误日志* * @param ex*/protected void writeErrorLog(Throwable ex) {String info = null;ByteArrayOutputStream baos = null;PrintStream printStream = null;try {baos = new ByteArrayOutputStream();printStream = new PrintStream(baos);ex.printStackTrace(printStream);byte[] data = baos.toByteArray();info = new String(data);data = null;} catch (Exception e) {e.printStackTrace();} finally {try {if (printStream != null) {printStream.close();}if (baos != null) {baos.close();}} catch (Exception e) {e.printStackTrace();}}Log.d("example", "崩溃信息\n" + info);File dir = new File(LOG_DIR);if (!dir.exists()) {dir.mkdirs();}File file = new File(dir, LOG_NAME);try {FileOutputStream fileOutputStream = new FileOutputStream(file, true);fileOutputStream.write(info.getBytes());fileOutputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 获取当前日期* * @return*/private static String getCurrentDateString() {String result = null;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault());Date nowDate = new Date();result = sdf.format(nowDate);return result;}/*** Activity关闭时,删除Activity列表中的Activity对象*/public void removeActivity(Activity a) {list.remove(a);}/*** 向Activity列表中添加Activity对象*/public void addActivity(Activity a) {list.add(a);}/*** 关闭Activity列表中的所有Activity*/public void exit() {for (Activity activity : list) {if (null != activity) {activity.finish();}}// 杀死该应用进程android.os.Process.killProcess(android.os.Process.myPid());}
}
系统错误后要还是要提示用户系统错误.这个是崩溃activity,
<activityandroid:name="com.example.test.CollapseActivity"android:theme="@android:style/Theme.Holo.Dialog.MinWidth" >
</activity>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="horizontal" ><Buttonandroid:id="@+id/collapse_restart"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="重启应用" /><Buttonandroid:id="@+id/collapse_exit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="退出应用" /></LinearLayout>
public class CollapseActivity extends Activity {private Button btnRestart, btnExit;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.collapse_activity);setTitle("应用崩溃了");btnRestart = (Button) findViewById(R.id.collapse_restart);btnExit = (Button) findViewById(R.id.collapse_exit);btnRestart.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(getApplicationContext(),MainActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);finish();}});btnExit.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}
}
转载于:https://my.oschina.net/oldfeel/blog/187862
android 记录崩溃日志相关推荐
- Android捕捉崩溃日志并输出日志文件
Android捕捉崩溃日志并输出日志文件 当程序与运行时发生崩溃,可以捕捉到当前崩溃的日志信息并写入文件保存到指定的目录下.这里还做了最大文件数量限制,超过数量即删除旧日志文件. import jav ...
- Android 异常崩溃日志,捕捉并保存到本地
Android 异常崩溃日志,捕捉并保存到本地: 前几天因为在省公安厅做一个通讯类之类的应用:碰到个问题,就是download人员信息将信息保存到本地数据库完成的时候,菊花转还没有dismission ...
- Android 应用崩溃日志的收集和上传
如何将应用崩溃日志收集起来? Android 应用难以避免的会 crash ,也称为崩溃,无论你的程序多完美,总是无法避免 crash 的发生.这对用户来说是很不友好的,也是开发者所不愿意看到的.更糟 ...
- android xlog崩溃日志,Android第三方log库:xlog使用记录
第一步:由于xlog发布在jitpack 仓库,所以如果android studio没有在project目下的的build.gradle下配置jitpack仓库的话需要配置下 allprojects ...
- android查找邮件程序,Android 程序崩溃日志邮件获取
版权声明:本文为博主原创文章,未经博主允许不得转载. 在我们开发Android应用程序的时候,BUG的出现是难以避免的,时不时还会出现崩溃的情况,这个时候,我们急需知道造成问题的原因是什么,但是,在没 ...
- android xlog崩溃日志,腾讯Xlog接入指南与踩过的坑
一 为什么要接入日志打印系统? 相信大家在开发应用的时候,总会遇到bug,这个时候,如果bug是在我们本地开发的过程中发现的,那么我们把手机插入android studio进行联调,就可以马上定位到出 ...
- Android 保存崩溃日志到本地目录下
代码如下可以直接复制过去,别人的代码修改了下 package com.hly.rtxt; import android.annotation.SuppressLint; import android. ...
- android 记录ip 日志,Linux 实现rsyslog日志里面的IP地址记录 未测试
[读书笔记]iOS-ARC-Xcode检测循环引用 一,在桌面上新建立一个工程,在ViewController.m中输入如下代码: - (void)viewDidLoad { [super viewD ...
- Android手机崩溃日志查看
1.通过adb连接手机 2.输入adb logcat -v time >d:/log.txt,抓取log 3.打开log,如果是ANR,就搜索[anr],如果是crash就搜索[fatal]
最新文章
- 代码逻辑是分方法写好 还是在一个方法写好_这一团糟的代码,真的是我写的吗?...
- CTFshow 命令执行 web41
- 注解方式实现aop-快速入门
- RabbitMQ有5种工作模式
- 【渝粤教育】电大中专电商运营实操作业 题库
- bootstrap 中这段代码 使bundles 失败
- php能否缓存,PHP缓存实现
- HTML五合一收款码网站源码(带35套模板)
- django调用支付宝
- mysql查阅建立的库_mysql 怎么查看创建的数据库和表
- 杨辉三角(Python)
- 查看浏览器占有的市场份额
- python opencv 将白色底变成透明底
- 博客项目实现文章评论功能
- tfs java_Jenkins TFS集成
- bmi计算器公式_BMI 计算器
- Memcached命名空间
- No.13 Not Shading
- 你所不了解的分布性系统之高可用篇
- 基于lnmp环境配置wordpress,以及403 Forbidden错误解决
热门文章
- 若依集成ip2region实现离线IP地址定位
- [Ext JS 4] 实战之将chart导出为png, jpg 格式的文件
- [Web Chart系列之三] 图形布局-Layout
- 山西评计算机高级职称,山西专业技术职称评审不再统一组织外语和计算机能力考试...
- as 从java_从Java调用AS400 RPG
- 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...
- php和ajax实现聊天功能,怎么在PHP项目中使用jquery与ajax实现一个即时聊天功能
- php只刷新一次,怎么让php网页指只刷新一次
- html语言中标记h1代表什么,HTML5中的标题标记(H1内部的P)中是否有段落元素是否有效?...
- 基于element ui的收起展开检索条件效果