前言
恰巧看到鸡排大大五一更新了一款小神器,瞅着很nice,今天特意玩了一波,感觉很棒~~~
以后要跟着鸡排看世界,啦啦啦~
鸡排大大地址
首先,附上一波鸡排大大地址,各位小伙伴可点击进去,学习鸡排淫思奇巧~
鸡排大大个人博客地址:
安卓Bus地址:
http://www.apkbus.com/home.php?mod=space&uid=889706&do=index
掘金地址:
最最最关键的,当然是GitHub地址喽:
跟着鸡排走,有肉吃~
好啦,不扯皮啦,聊点正事儿~
AutoEx 简述(鸡排应该不会打死我 ^_^)
先来一个UML时序图,我们先简单讲讲道理好不啦~
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请求。
说实话,这里面还真有不少东西,LZ今天分析到这,改天咱好好扒光鸡排兄。。。
共同学习,写下你的评论
评论加载中...
作者其他优质文章