专栏首页HLQ_Struggle跟着鸡排看世界 AutoEx:v1.0.6 实践

跟着鸡排看世界 AutoEx:v1.0.6 实践

前言

恰巧看到鸡排大大五一更新了一款小神器,瞅着很nice,今天特意玩了一波,感觉很棒~~~

以后要跟着鸡排看世界,啦啦啦~

鸡排大大地址

首先,附上一波鸡排大大地址,各位小伙伴可点击进去,学习鸡排淫思奇巧~

鸡排大大个人博客地址:

http://www.dajipai.cc/

安卓Bus地址:

http://www.apkbus.com/home.php?mod=space&uid=889706&do=index

掘金地址:

https://juejin.im/user/58c25a5b2f301e006bb0552c

最最最关键的,当然是GitHub地址喽:

https://github.com/BolexLiu

跟着鸡排走,有肉吃~

好啦,不扯皮啦,聊点正事儿~

AutoEx 简述(鸡排应该不会打死我 ^_^)

先来一个UML时序图,我们先简单讲讲道理好不啦~

诞生初衷

帮助Android开发者,让项目在崩溃时从异常堆栈中,自动寻找Stack Overflow的回答。

使用方式

Step 1: 在项目根build.gradle添加仓库地址:

allprojects {
    repositories {maven { url 'https://jitpack.io' }}
}

Step 2: 添加远程依赖:

dependencies {
    implementation 'com.github.BolexLiu:AutoEx:v1.0.6'
}

Step 3: Application初始化

AutoEx.apply(this);

当然也可以自定义配置参数:

这里需要注意,千万要记得在AndroidManifest文件中指定地址:

android:name=".base.BaseApplication"

此外,还需注意,务必提供访问网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

最后,说一下AutoEx的优势~

AutoEx优势

  • 体积小: 不到9kb;
  • 无需担心依赖冲突: 为了保持精简干净不给开发者添麻烦,AutoEx放弃依赖第三方库(比如OKHttp、Gson等);
  • 提升开发效率: 免去各种度娘,谷歌爸爸搜索时间,AutoEx即时捕捉异常为你搞定搜索时的繁琐~

贴心的撸码,为你带来不一般的享受~

实践是检验真理的唯一标准

下面,我们通过几个测试,来验证下AutoEx究竟有多么神奇~

Example 1: java.lang.ArithmeticException: divide by zero

测试代码:

int num = 10 / 0;

运行后立即奔溃,异常如下:

稍等片刻后,即可发现AutoEx为你贴心查找出来在Stack Overflow同类问题链接:(获取结果和当前网络环境有关~)

一个不够,再来一个测试:

Example 2:java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSequence)’ on a null object reference

测试代码段:

TextView tvTest=findViewById(R.layout.activity_main);
tvTest.setText("aaa");

问题日志详情:

AutoEx按照默认条件为我们检索有效信息如下:

深入鸡排兄源码

来来来,一起拔光鸡排~~~

首先看看结构:

API类内容

定义请求基本格式体。

AutoEx类内容

对外暴露AutoEx入口,进行初始化。

/**
     * @param mApp Applicatin
     */
    public static void apply(Context mApp) {
        apply(mApp, AutoEx.maxSize);
    }

    /**
     * @param mApp    Applicatin
     * @param maxSize 最大提示答案数目
     */
    public static void apply(Context mApp, int maxSize) {
        apply(mApp, maxSize, LOG_TAG, true);
    }

    /**
     * @param mApp    Applicatin
     * @param maxSize 最大提示答案数目
     * @param tag     自定义日志 默认 AutoEx
     */
    public static void apply(Context mApp, int maxSize, String tag) {
        apply(mApp, maxSize, tag, true);
    }

    /**
     * @param mApp    Applicatin
     * @param maxSize 最大提示答案数目
     * @param tag     自定义日志 默认 AutoEx
     * @param isDebug 是否开启调试 true为开启 false为关闭 默认开启
     */
    public static void apply(Context mApp, int maxSize, String tag, boolean isDebug) {
        if (!isDebug) {
            return;
        }
        if (autoEx == null) {
            autoEx = new AutoEx();
            autoEx.init(mApp, maxSize, tag, isDebug);
        }
    }

这里可以很清晰得看到鸡排兄为我们提供了多种不同使用方式:

  • 仅传递Context,将全部采用AutoEx默认配置;
  • 传递Context以及自定义条数,方便有些同志检索多条结果;
  • 也可上一条基础上自定义自己得Tag,方便日志查看;
  • 最后也可在发布前关闭AutoEx。
   private void init(Context mApp, int maxSize, String tag, boolean isDebug) {
        this.mApp = mApp;
        maxSize = maxSize;
        tag = tag;
        this.isDebug = isDebug;
        this.mUEH = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this.handler);
    }

而接下来则通过init方法去初始化AutoEx基本配置,包含异常捕获以及异常处理,这里通过一个handler,我们一起来看看里面具体干了些什么事儿?

   private String getErrorMsg(Throwable ex) {
        String message = ex.getMessage();
        return message.substring(message.indexOf(":") + 2);
    }

    UncaughtExceptionHandler handler = new UncaughtExceptionHandler() {
        public void uncaughtException(Thread thread, Throwable ex) {
            String errorMsg = AutoEx.this.getErrorMsg(ex);
            Intent intent = new Intent(AutoEx.this.mApp, DoHandleService.class);
            intent.putExtra("ERROR_MSG", errorMsg);
            intent.putExtra("MAX_SIZE", AutoEx.maxSize);
            AutoEx.this.mApp.startService(intent);
            AutoEx.this.mUEH.uncaughtException(thread, ex);
        }
    };

捕获到异常后取出当前异常信息,之后将获取到得异常以及检索条数传递到自定义Service中进行最终处理。

AutoExConstant类内容

定义AutoEx需要得一些日志信息。

DoHandleService类内容

这里便是AutoEx关键地带了。通过开启Service,拿到异常以及检索条数进行数据抓取。

HttpUtil类内容

主要封装Get请求。

个人感悟

这俩天确实学习到很多东西,也坚定了自己要走的路。

点滴积累,让我们一起变得越来越好~

本文分享自微信公众号 - 贺利权(hlq_struggle),作者:贺利权

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个key玩转第三方服务(微信支付、某某地图)

    之前LZ写项目的时候,多少都会使用一些第三方,主要为地图相关,无论从百度地图还是高德地图来讲,都需要一个SHA1+包名去配置key,而这个key,就是使用地图的...

    HLQ_Struggle
  • 记录一次 Safari 调试 iPhone Web Page

    话说,前些日子一直处理集团官网开发中,前几日接到测试反馈,移动端某个页面兼容性有问题。

    HLQ_Struggle
  • Android|模块化探索抽取 basic 简化子 module 冗余

    Android 的历史中,各种各样的技术一波接着一波,模块化,插件化,组件化等等。可怜的我,还依然观望,停滞不前。

    HLQ_Struggle
  • 4吴恩达Meachine-Learing之多变量线性回归(Linear-Regression-with-Multiple-Variables

    双愚
  • 对话魏少军、赵伟国:一年进口3120亿美金芯片意味着什么?

    9月11日,网易科技和杨澜联合推出的节目《致前行者》第二期《中国芯片,路在何方?》正式上线。杨澜对话清华大学微电子所所长魏少军教授和紫光集团董事长赵伟国先生,讨...

    AI科技大本营
  • gulp + gulp-better-rollup + rollup 构建 ES6 开发环境

    关于 Gulp 就不过多啰嗦了。常用的 js 模块打包工具主要有 webpack、rollup 和 browserify 三个,Gulp 构建 ES6 开发环境...

    用户6167509
  • 通用发布全自动驾驶电动汽车 没有方向盘 可自动关门

    BI中文站 1月12日报道 通用汽车公司刚刚发布了一款全自动驾驶电动汽车,它没有方向盘,没有踏板,只有座椅和屏幕,车门可以自动关闭。这款汽车有望于2019年上路...

    企鹅号小编
  • Django(二):url和views

      网络通讯的本质是socket,从socket封装到MVC模式,参见另外几篇博客。本节笔记整理自Django2.0官方文档。

    py3study
  • qmake自定义函数

    Qt君
  • 亚马逊推出首款自研CPU和AI云芯片

    11月26日至30日,亚马逊2018 re:Invent 开发者大会在美国拉斯维加斯举行。亚马逊推出首款自研ARM架构云服务器CPU Graviton和首款云端...

    人工智能快报

扫码关注云+社区

领取腾讯云代金券