Android全局异常捕获
来源:互联网 发布:东方财富炒股软件 编辑:程序博客网 时间:2024/05/01 01:31
在Android开发中在所难免的会出现程序crash,俗称崩溃。用户的随意性访问出现测试时未知的Bug导致我们的程序crash,此时我们是无法直接获取的错误log的,也就无法修复Bug。这就会极大的影响用户体验,此时我们需要注册一个功能来捕获全局的异常信息,当程序出现crash信息,我们把错误log记录下来,上传到服务器,以便于我们能及时修复bug。这时我们就需要自己来进行处理,现在这里介绍用第三方库 Sentry-Android 来进行捕获,下面就开始在AS中进行实际操作。
在用这个之前先进行下面以下配置:
配置权限:
<!-- REQUIRED to send captures to Sentry --><uses-permission android:name="android.permission.INTERNET" /><!-- OPTIONAL but makes Sentry-Android smarter --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Gradle导入包
compile 'com.joshdholtz.sentry:sentry-android:1.4.4'
在启动Activity中初始化Sentry,开始监听
String yourDSN = "填写你自己的DSN"; Sentry.init(this, yourDSN); Sentry.debug = true; Sentry.captureMessage("捕获异常数据的Log");
PS:直接使用Sentry的话,它只会把你手机的device、device.family、 level、 os、 os.name显示出来.
如需显示App手机其他信息的话就需要自定义SentryManager,下面我们就来自定义代码。
/** * Sentry 管理器,负责初始化 Sentry Client,并在捕捉事件时增加 OS, Device, Build 等设备和软件信息 */public class SentryManager { private final static String osVersion = Build.VERSION.RELEASE; private final static String deviceName = getDeviceName(); private static int buildVersion = 0; /** * 初始化 Sentry * @param context 上下文 */ public static void init(final Context context, String dsn) { Sentry.setCaptureListener(new Sentry.SentryEventCaptureListener() { @Override public Sentry.SentryEventBuilder beforeCapture(Sentry.SentryEventBuilder builder) { //在这里面你想要什么信息的话直接builder.getTags().put("key", "值")就可以了 try { if (buildVersion == 0) { buildVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode; } } catch (PackageManager.NameNotFoundException e) { buildVersion = -1; } try { builder.getTags().put("OS", osVersion); builder.getTags().put("Device", deviceName); builder.getTags().put("Build", buildVersion); } catch (JSONException e) { // we do nothing } return builder; } }); Sentry.init(context.getApplicationContext(), dsn); } /** * 获得设备名称 * * @return 设备名称 */ private static String getDeviceName() { String manufacturer = Build.MANUFACTURER; String model = Build.MODEL; if (model.startsWith(manufacturer)) { return capitalize(model); } else { return capitalize(manufacturer) + " " + model; } } /** * 大写首字母 * * @param s 字符串 * @return 将首字母大写返回的字符串 */ private static String capitalize(String s) { if (s == null || s.length() == 0) { return ""; } char first = s.charAt(0); if (Character.isUpperCase(first)) { return s; } else { return Character.toUpperCase(first) + s.substring(1); } }}
在Activity调用,跟上面一样
String yourDSN = "填写你自己的DSN"; SentryManager.init(this, yourDSN); Sentry.debug = true; Sentry.captureMessage("捕获异常数据的Log");
这里用到的第三方库地址 Sentry-Android
最后 这里还可以使用官方推出的Raven来进行捕捉,不过主干上还没有从本地上传到服务器上,不过起分支已有,可以去关注下 Raven官方出的捕获异常框架
0 0
- android 捕获全局异常
- android 捕获全局异常
- Android 捕获全局异常
- android 全局异常捕获
- android捕获全局异常
- android捕获全局异常
- android 全局异常 捕获
- Android捕获全局异常
- android 捕获全局异常
- Android全局捕获异常
- android 捕获全局异常
- Android全局异常捕获
- android 全局异常捕获
- Android 全局异常捕获
- Android 全局异常捕获
- Android全局异常捕获
- Android 捕获全局异常
- Android 全局异常捕获
- Activity的生命周期
- Java 软件基础知识
- 基于Android的移动图书馆管理系统
- 学习vueJs第一
- [LeetCode 136] Single Number
- Android全局异常捕获
- 倍数表达法用法归纳
- tjut 2871
- 孤儿进程与僵尸进程
- 1898: [Zjoi2005]Swamp 沼泽鳄鱼
- Android 跨进程通信(一)
- CUDA入门基本概念简介
- Tomcat-001-一个简单的web服务器
- Spring+Spring MVC+myBatis整合详细步骤