1 Star 0 Fork 12

johnta / AndroidDesign

forked from qlslylq / AndroidDesign 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Android网络搭建文档_2016_07_01.txt 5.66 KB
一键复制 编辑 原始数据 按行查看 历史
qlslylq 提交于 2016-07-03 02:34 . 删除不同时期新建的更新文档
更新时间:2016-07-01 更新人:qlslylq
关于网络层搭建:
1:搭建的两种方式:
一:类似于AsyncTask这样的轻量级异步加载方式,一般为实例方式 [具备两层网络的前提下,也可静态化;一层网络不方便静态化]
二:类似于Thread+Handler这样的自定义异步加载方式,一般为静态方式 [为适合的方式,也可以直接将二层网络静态方式转为实例方式]
关于一层网络与二层网络:
一层网络:为网络内核层,层级也为相对概念,例如可以是封装了第三方网络后的最近的一层,主要提供get(),post(),updateFile(),updateFiles(),addParams(),getUrl()等函数
二层网络:完整的二层网络应该包括三项:封装命令与参数;向一层发出请求;同步返回数据到二层后经过二层解析,二次处理,回调窗口层
关于一层内核网络与假二层网络:普通企业项目中均不建议使用。
这里的一层内核网络指的是只有内核层,没有子层[二层]的写法:
(1)为标准的提供访问自家服务器接口[即提供sdk中jar的企业]的写法;
(2)为封装了第三方jar网络或自实现网络的某些普通企业[不提供sdk的企业]的写法
特点:直接回调窗口,省却中间代码环节,节省编写时间但增加调试困难,为即用即回调的写法。一般为在外包项目中赶时间采取的写法 。主要功能为封装命令与参数;发出请求
这里的假二层网络指的是最然包含核心层与子层,但子层仅提供,封装命令与参数;向一层发出请求与两项功能,不进行解析;与二二次处理的写法,从这方面看,
假二层网络包含的功能与只有一层的内核网络完全一致。即假二层网络只有两层其形,没有两层其质。这也就是为什么要叫"假"二层网络的原因。
当然假二层网络与只有一层的内核网络之间的区别为请求的写法。假二层从形式上分离了请求,而内核一层从形式上融合请求到了窗口层。
内核一层要更轻量级;假二层可调试性更强,窗口冗余一致。而内核一层的回调管理可以写成聚合-分散式或分散式,聚合-分散式可调试性更强。
2:比较及转换:
(1)比较:各有优劣,但综合看企业开发时静态搭建比实例搭建要好,省略原因说明。例如一句话调用,自定义模拟数据等方面静态方式更灵活
实例方式:为标准的SDK内部网络开发时所使用的方式,由于SDK的固定性,不需灵活等特性,使用实例方式更好并更轻量级,比如SDK只需要直接回调窗口,无需模拟数据等。
静态方式:但做非开放SDK的企业开发时,由于需要具备更多灵活性与可操作性,静态方式好于实例方式。
(2)转换:
实例方式前期可以很方便地转为静态方式,主要是要做网络中转站的桥接。即在搭建好的静态中转站基础上,使用继承拦截技术,可以将SDK的网络层连接到自身的静态中转站上。具体为拦截四种网络回调,即拦截SDK中网络监听的增删查改,之后回调到静态中转站上。一般企业开发使用到第三方自带网络模块的SDK时,可以选择沿用旧方式,也可以桥接到静态中转站的方式,使可以在桥接后很方便地享用网络进度的自动化调用,错误邮件自动发送,日志记录持久化等等诸多调试模块。
反之,静态方式没有必要转成实例方式。
3:须知
前1:窗口层所需要的接口数据很多时候是二次处理后的数据,二次处理在网络子层外向异步中执行最优,不会阻塞窗口,而窗口又可以拿到最终的数据,并可减少窗口冗余。
前2:关于客户端本地模拟数据:在网络子层模拟数据比在窗口子层要好,可以快速删除并改正,并可让窗口层完全按照真实网络数据的场景进行开发,即让窗口层0更改
前3:外异内同方式下进行网络子层数据的模拟,与真实网络数据产生的效应是一样的,是经过了网络上层的请求与接收的,网络进度也能自动打开与关闭。
4:无论是静态还是实例方式,都面临同异步顺序的选择:企业开发推荐使用外异内同方式
[一般在企业静态或实例方式中选择] 外向异步,内向同步:网络请求及接口数据二次处理都在网络子层执行,容易处理并发,容易统一管理。且能够在网络子层模拟数据。
[一般在SDK内部实例方式中使用] 外向同步,内向异步:由于内向不能直接返回数据,所以只能直接回调到窗口层,缺点是不能二次处理数据,不能在网络子层模拟数据。
5:如果误在企业开发中使用了外同内异方式,可以考虑重构
外同内异方式可以进行重构,目的:分离二次处理与异步化接口数据解析,方案:
[法1]与子窗口层建立联系,即联系窗口-->二次处理[第三个网络辅助层]-->回调窗口;
[法2]与网络子层建立联系,即联系网络子层,二次处理[第三个网络辅助层]-->回调窗口。
[法3]直接将二次处理与解析的整体进行分离和异步化,即仅进行第三网络辅助层的建立,并回调窗口[这样需重写网络进度的调用时机]
结果:以上重构,都必须让二层的网络新加至三层,此种重构负担过重。另外,仍然不好处理并发,且不能统一管理。最主要的是,都会让原本的一次窗口回调变为二次窗口回调
兼容考虑:兼顾考虑手机速度[一般很快]与接口数据量[一般很少],建议可以牺牲部分流畅度的体验,不进行上述重构,即不处理窗口短暂的阻塞,除非,当接口数据量巨大到明显阻塞窗口时,才手动异步;二次处理较多时,才手动分离
6:补充说明
包含网络模块的jar分为两种类型:
帮助搭建普通企业网络的jar:简称搭建jar。大部分为个人开发的jar。使用注意:任何较正式的搭建网络型jar发出请求时,都有选择调用同步[方法会返回数据]或异步[方法不会返回数据]的重载。一定要选择同步。方便二层异步,并在取到数据后进行解析与二次处理。[注:异步本质上是不可能返回数据的,但通过技术手段:如内嵌层先同步+调异步+等待数据+数据完成+返回数据的方式也可以让异步返回数据。如在xutils中内核网络请求的异步重载是有返回数据的]
举例:OKHttp,xutils,afinal,volley,ThinkAndroid,Android SDK自带的网络模块
提供访问自家服务接口的jar:简称服务jar。为企业开发的jar。
举例:聚合SDK,Bmob SDK,支付宝SDK,百度开放SDK。使用注意:大量使用里面接口时,可以继承拦截,桥接到自身静态网络中转站。
7:初开项目正确接入网络的建议方式
一:[1]搭建好静态[网络数据+数据库数据+其它耗时数据]中转站。创建并设置好状态分发。八种状态与八种网络回调一一对应。
[2]中转站为外向,使用异步方式。最大程度将主线程阻塞转移至异线程阻塞。
[3]使用Handler将中转站与窗口层连接起来。方便在中转站模拟网络数据,并经由中转站分发到窗口。
[4]深化中转站调试模块,如网络错误自动定位并提示,请求与接收网络自动持久化输出到手机日志。接口数据无效公用处理。
[5]搭建网络内核层,分为抽象层与实现层,主要抽象和实现get(),post(),updateFile(),updateFiles(),addParams(),getUrl()等函数,请求时使用同步方式
回调数据采用多层级传递,先聚合再分发的方式,数据传递过程:Handler[网络子层method标记]-->中转站上层[网络进度显示和隐藏,写入日志]-->窗口上层[Toast显示,错误定位]-->窗口子层[根据请求的method标记分发处理],传递与接收过程均采用唯一的method标记,这样,避免了重新定义标记的麻烦
二:建议使用的搭建型网络jar
网络内核层,建议使用OKHttp或xutils
如果需要使用综合性功能,建议使用xutils
如果只需要使用网络模块,建议使用OKHttp
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/johnta/AndroidDesign.git
git@gitee.com:johnta/AndroidDesign.git
johnta
AndroidDesign
AndroidDesign
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891