Android SDK开发艺术探索(二)Exception or ErrorCode

1、前言

本篇是Android SDK开发艺术探索系列的第二篇文章,介绍了Java/Android中的异常以及在SDK开发中是如何根据异常的特性进行融合设计的思考。注意,本篇并不涉及详细地异常介绍以及异常发生后代码执行地顺序问题,而是基于异常的基本特性与职责边界,结合业务开发的实际状况,试图探讨抛异常与错误码的选择。html

系列文章:java

Android SDK开发艺术探索(一)开篇与设计程序员

Android SDK开发艺术探索(二)Exception or ErrorCode安全

Android SDK开发艺术探索(三)初始化markdown

Android SDK开发艺术探索(四)个性化配置oracle

Android SDK开发艺术探索(五)安全与校验oop

Android SDK开发艺术探索(六)压缩与优化post

Android SDK开发艺术探索(七)依赖原则与打包方法优化

2、异常的概念

首先,咱们来认识一下异常:spa

异常是指在程序运行期间发生的意外事件,它会中断程序(当前方法或做用域)正常执行的流程

异常的层次

  • Checked Exception,好比最多见的IOException,这种异常是指须要调用处显式处理的类型,要么用try catch捕获,要么用 throw 再抛出去;
  • Unchecked Exception指的是全部继承自Error(包含自身)或者RuntimeException(包含自身)的类,好比咱们常见的NullPointerException就属于这类。这些异常不强制在调用处显式处理,可是也能够经过try catch处理;
  • Throwable是ExceptionError的父类。

2.一、APP开发者看待异常的角度

在APP的开发中,彷佛咱们老是被动的根据编译器的提示编写异常代码,只是为了让编译器经过。为何编译器跟咱们过不去?由于这些提示都是由于对于的操做抛出了Checked类型的异常,须要手动显式进行处理。

在Java开发中,NullPointerException,有部分人简称NPE,是每一个开发者都很熟悉的异常,也是让人深恶痛绝的异常。

Java程序员:要么正在debug NPE,要么就在debug NPE的路上。

2.二、SDK开发者看待异常的角度

在SDK开发中,除了要面临APP开发中那些对异常的处理,还须要充分考虑被异常中断了的那些逻辑对总体交互流程产生的影响。

SDK自身的逻辑与APP密不可分,假如由于SDK内部发生的异常,中断了SDK内部流程,而又未告知APP这显然是不可接受的。所以,咱们必须谨慎处理SDK内部发生的异常,原则是不该该把异常内部消化,而应该向外抛出,以一样异常的形式或者自定义的返回码。

2.三、Exception or ErrorCode,这是一个问题

在SDK的逻辑设计中,既能够经过异常告知开发者,也能够经过返回码告知开发者,那么如何选择呢?下面咱们经过两个例子来探索处理的方式

  • **场景1:**在SDK的入参中,须要APP传入手机号码,并校验参数合法性
  • 场景2: 在SDK内部,须要获取APP ID并进行白名单校验

这两种场景下,都须要在SDK的调用流程中处理并反馈,而反馈能够经过返回码,也能够直接抛异常(系统内置异常或自定义异常)孰好孰坏?

笔者认为,在咱们实际的SDK开发中,应该经过对相关错误进行分类,来决定采用异常交互仍是返回码交互

自定义异常是一种比较“重”的告知方式,由于异常意味着中断。返回码是一种比较“轻”的告知方式,也是最不容易引发开发者重视的告知方式。

常见SDK开发者没有清晰的返回码对照表,亦常见APP开发者没有完整地处理所有返回情形。所以,不可逆转的错误建议采用异常处理机制,直接中断程序执行流程让问题完全暴露出来,避免发生更多预期以外的错误。

具体归纳为:

在与业务有关的逻辑且涉及用户(注意,非开发者,下同)能够重试的部分,应该采用返回码告知开发者,方便其进行后续处理。好比,用户输入了不符合手机号码规则的信息,就能够经过咱们的自定义检查逻辑来返回对应的返回码,集成SDK的开发者针对处理便可。

在与业务无关的逻辑且一旦发生用户没法自行处理的部分,能够采用抛出自定义异常的处理方式。好比,SDK开发着对APP的包名校验,这是一个面向开发者的校验逻辑,所以不妨直接抛出自定义异常,坦然让APP崩溃,让开发者从错误堆栈信息中找到问题。这种情形,也许就是Unchecked Exception的使用场景吧。

Exception or ErrorCode,这个问题想必你们也有了一个感性认识,也欢迎耐心看至此处的读者发表本身的看法。

3、结语

本篇主要是回顾了一下异常的概念,探讨了异常在SDK开发中的使用处理问题。总结起来:

  1. 针对用户形成的无效参数等可重试的逻辑异常,应该经过返回码交互;
  2. 针对开发者未遵照约定形成的没法重试的专有异常,应该经过直接抛异常退出程序,由于此类型错误不该该让用户接触,也没有继续业务流程的必要;

接下来将继续探讨SDK开发中的初始化设计,包括初始化的几种方式,初始化对APP启动的影响,顺便介绍SDK开发历程中因为误入歧途而了解到的Java双重继承实现。

最后,若是本篇文档对您的开发有所帮助或启发,点赞/关注/分享三连就是对做者持续创做最好的激励,感谢支持!

参考文章

版权声明:

本文首发于个人专栏 AndDev安卓开发 已受权鸿洋公众号独家发布。

相关文章
相关标签/搜索