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 记录崩溃日志相关推荐

  1. Android捕捉崩溃日志并输出日志文件

    Android捕捉崩溃日志并输出日志文件 当程序与运行时发生崩溃,可以捕捉到当前崩溃的日志信息并写入文件保存到指定的目录下.这里还做了最大文件数量限制,超过数量即删除旧日志文件. import jav ...

  2. Android 异常崩溃日志,捕捉并保存到本地

    Android 异常崩溃日志,捕捉并保存到本地: 前几天因为在省公安厅做一个通讯类之类的应用:碰到个问题,就是download人员信息将信息保存到本地数据库完成的时候,菊花转还没有dismission ...

  3. Android 应用崩溃日志的收集和上传

    如何将应用崩溃日志收集起来? Android 应用难以避免的会 crash ,也称为崩溃,无论你的程序多完美,总是无法避免 crash 的发生.这对用户来说是很不友好的,也是开发者所不愿意看到的.更糟 ...

  4. android xlog崩溃日志,Android第三方log库:xlog使用记录

    第一步:由于xlog发布在jitpack 仓库,所以如果android studio没有在project目下的的build.gradle下配置jitpack仓库的话需要配置下 allprojects ...

  5. android查找邮件程序,Android 程序崩溃日志邮件获取

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在我们开发Android应用程序的时候,BUG的出现是难以避免的,时不时还会出现崩溃的情况,这个时候,我们急需知道造成问题的原因是什么,但是,在没 ...

  6. android xlog崩溃日志,腾讯Xlog接入指南与踩过的坑

    一 为什么要接入日志打印系统? 相信大家在开发应用的时候,总会遇到bug,这个时候,如果bug是在我们本地开发的过程中发现的,那么我们把手机插入android studio进行联调,就可以马上定位到出 ...

  7. Android 保存崩溃日志到本地目录下

    代码如下可以直接复制过去,别人的代码修改了下 package com.hly.rtxt; import android.annotation.SuppressLint; import android. ...

  8. android 记录ip 日志,Linux 实现rsyslog日志里面的IP地址记录 未测试

    [读书笔记]iOS-ARC-Xcode检测循环引用 一,在桌面上新建立一个工程,在ViewController.m中输入如下代码: - (void)viewDidLoad { [super viewD ...

  9. Android手机崩溃日志查看

    1.通过adb连接手机 2.输入adb logcat -v time >d:/log.txt,抓取log 3.打开log,如果是ANR,就搜索[anr],如果是crash就搜索[fatal]

最新文章

  1. 代码逻辑是分方法写好 还是在一个方法写好_这一团糟的代码,真的是我写的吗?...
  2. CTFshow 命令执行 web41
  3. 注解方式实现aop-快速入门
  4. RabbitMQ有5种工作模式
  5. 【渝粤教育】电大中专电商运营实操作业 题库
  6. bootstrap 中这段代码 使bundles 失败
  7. php能否缓存,PHP缓存实现
  8. HTML五合一收款码网站源码(带35套模板)
  9. django调用支付宝
  10. mysql查阅建立的库_mysql 怎么查看创建的数据库和表
  11. 杨辉三角(Python)
  12. 查看浏览器占有的市场份额
  13. python opencv 将白色底变成透明底
  14. 博客项目实现文章评论功能
  15. tfs java_Jenkins TFS集成
  16. bmi计算器公式_BMI 计算器
  17. Memcached命名空间
  18. No.13 Not Shading
  19. 你所不了解的分布性系统之高可用篇
  20. 基于lnmp环境配置wordpress,以及403 Forbidden错误解决

热门文章

  1. 若依集成ip2region实现离线IP地址定位
  2. [Ext JS 4] 实战之将chart导出为png, jpg 格式的文件
  3. [Web Chart系列之三] 图形布局-Layout
  4. 山西评计算机高级职称,山西专业技术职称评审不再统一组织外语和计算机能力考试...
  5. as 从java_从Java调用AS400 RPG
  6. 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...
  7. php和ajax实现聊天功能,怎么在PHP项目中使用jquery与ajax实现一个即时聊天功能
  8. php只刷新一次,怎么让php网页指只刷新一次
  9. html语言中标记h1代表什么,HTML5中的标题标记(H1内部的P)中是否有段落元素是否有效?...
  10. 基于element ui的收起展开检索条件效果