博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 开发网络框架--呃,名字没想好,反正很普通
阅读量:7226 次
发布时间:2019-06-29

本文共 4910 字,大约阅读时间需要 16 分钟。

hot3.png

    从事安卓开发也有三年时间了,刚毕业的时候一直很纠结大公司好还是小公司好,现在的结论是,只要你是个人才,平台怎么样都不重要,那万一我只是个普通人呢,我的心得就是,打死!都要!找一个!大!的公司!虽然大公司都会有一些大公司病但是作为一个程序员一只货真价实的猴子你需要关心的不是这些而是自己的职业规划自己的前进方向。小的公司虽然很锻炼人,但是技术上的成长是特别缓慢的,大的公司虽然制度多,规矩深,但是技术实力的进展绝对是很有帮助的,虽然一切都是靠自学,但是有外因能利用当然还是要利用一下啦。

    这个网络请求框架的实现技术要点包括了FutureTask,ThreadPoolExcutor,Callable等,所以有必要的同学可以先去熟悉一下这些概念,真的要介绍这个自己封装的网络请求好像没什么好说的,要么........就这样啦???哈哈哈哈年轻人要淡定点,简单介绍一下吧,虽然这套比较老,但是应付很轻量级的应用还是可以考虑一下的,或者可以在阅读源码的过程中从这套源码里面获得一些自己的体会。

    封装的过程很简单,首先是对httpclient的请求参数分了几个过程做封装,

    1是从功能上封装分:自动重连请求管理类,检测网络状态请求管理类,安全调用管理类(主要用到是这个功能)

     2是从调用方式上封装:运用Future和Callable接口以及ExcutorService-----> AsynchronizedInvoke类。

     3是从请求组装和返回解析上做的封装:HttpClientUtil类(可以在里面组装参数或者Post的统一header),JsonResponseParser(这个类是根据业务需要可以统一按照固定格式解析json,如:{code:0 Message:"用户参数错误" data:""})

 

     然后是对用户调用网络请求做了封装,实现ThreadListener的两个类 分别为同步的(阻塞线程的)ThreadHelper类,自带progressDialog缓冲,和异步的ThreadAid类,两者的调用都会有各自对应的处理类来分别处理对应的网络请求(以前使用MVC模式让Activity的结构无比臃肿,以后可以使用MVP模式把Activity的功能独立出来,如果一个页面有好几个不同的用户动作来发起网络请求这个阅读难度真的是相当的大。)以下是调用过程,结构应该还算清晰吧。

在类里面声明成员变量 Future
indexResponseFuture; /** * 同步请求 */public void requestSynchronization(){ RemoteManager manager = RemoteManager.getPostOnceRemoteManager(); Request request = manager.createQueryRequest("你的网络请求地址"); request.addParameter("请求参数1", "参数1"); request.addParameter("请求参数2", "参数2"); ... ProgressDialog progress = showProgressDialog(R.string.app_up_data); progress.setOnDismissListener(new SynchronizationReport()); indexResponseFuture = shenApplication.asyInvoke(new ThreadHelper(progress, request));}/** * 异步请求 */public void requestAsynchronous(){ RemoteManager manager = RemoteManager.getPostOnceRemoteManager(); Request request = manager.createQueryRequest("你的网络请求地址"); request.addParameter("请求参数1", "参数1"); request.addParameter("请求参数2", "参数2"); ... shenApplication.asyInvoke(new ThreadAid(new AsynchronousListener(), request));}/** * 同步请求的网络回调 */class SynchronizationReport implements DialogInterface.OnDismissListener { @Override public void onDismiss(DialogInterface arg0) { Response response; if (indexResponseFuture == null) { return; } try { response = indexResponseFuture.get(); if (response == null) { //失败时用户自定义 } if (response.isSuccess()) { final JSONObject json = JsonUtil.getJsonObject(response.getModel()); //纯测试 这种方法请勿再用 runOnUiThread(new Runnable() { @Override public void run() { reportText.setText(json.toString()); ... } }); } else { toastShort(response.getMessage()); } } catch (InterruptedException e) { logError(e.getMessage()); } catch (ExecutionException e) { logError(e.getMessage()); } }}/** * 异步请求网络回调监听 */ class AsynchronousListener implements ThreadListener { @Override public void onPostExecute(Response response) { if (response == null) { //失败时用户自定义 } else if (response.isSuccess()) { final JSONObject json = JsonUtil.getJsonObject(response.getModel()); //纯测试 这种方法请勿再用 runOnUiThread(new Runnable() { @Override public void run() { reportText.setText(json.toString()); ... } }); } else { toastLong(response.getMessage()); } } }

     介绍就到这里啦,有兴趣的同学可以去git上下载源码来阅读。地址:https://github.com/wxcaixiaowei/NetFrame

 

     照例说点题外话,当初写这个的初衷是为了实现同步网络请求的用户缓冲友好界面,毕竟三年前刚学的时候还是啥都不懂,老是用HttpUrlconnection代码量很臃肿啊,并且也为了页面刷新优化设想过能不能分步骤分区域的显示一个安卓的界面,最近在学习frame层的知识的时候才发现比较困难,因为整个Activity里我们能看到的区域实际上是由很多的服务和进程以及组件一起构成的,其中涉及到WindowMnagerService,ViewRoot,DecorView,View,PhoneWindow等一些很复杂的源码类,整个Activity的显示过程是统一measure,layout,draw的,所以貌似从根本上分块显示内容难度很大,有的时候往这个脑洞上还会走偏,比如可以来一个遮罩层加动画来实现类似的分块效果(当然这个是求心理安慰并没有实际意义)。

     最近感悟较深的是因为越往底层学习越觉得自己的知识量匮乏,安卓系统从头开始学需要知道最基本的Binder进程间通信机制,匿名共享内存,系统级服务的启动过程,组件的最基本原始概念,恩,反正很多很多知识点都特别深入也广泛,而且连接性很强,就好比树的根有很多的分叉最终都会汇集到一个主根上来一样,看的越多速度越快,在看书学习的过程中就一个想法,我简直就还是个弱鸡啊。1年多没写博客,是因为实在不知道有什么好写的,说最新的UI控件?安卓6.0权限新解读?这些都是可以通过百度知道的,所以其实我写博客就两点,1.心情好,觉得自己最近有了很大的提升或者碰到一件特别逗比的技术上的事儿写出来做个记录让看到的人可以分享自己成长的喜悦,2.看状态,不忙的时候大概就会想想写点东西,不然如果面试的时候连个博客都没有是不是很low。对了,以上两条都不考虑懒的因素。

     最后推荐给初级进阶中级的几本书给大家吧,首先做这一行linux系统肯定是需要熟悉的,不用详细了解linux的内核,但是至少要知道linux这个计算机系统里的一些基本概念,比如系统方面的文件系统的组成,编译的过程都发生了什么事情?硬件方面的主板构成,寄存器的基本结构和作用等基础知识,这些基础知识可以作为支撑你整个计算机方面庞大体系的根基,linux的书我也就看过鸟叔的私房菜,可以对linux软件系统有个基本的了解,基本素质方面可以给大家推荐《程序员的自我修养--链接装载和库》。安卓方面进阶首先推荐一本入门进阶《Android开发艺术探索》这本粗略涉及了frame层的知识以及作者的开发实际经验,通俗易懂,写的特别人性化,如果觉得不够还需要更深入的,那么还是老老实实去啃源码吧,老罗的安卓之旅,这本书应该是必备了,虽然读起来比较晦涩和难懂,但是你要相信学习的过程是会越来越快的,好了,写的差不多了,大家一起共勉吧。

转载于:https://my.oschina.net/halfront/blog/726821

你可能感兴趣的文章
YII with()
查看>>
《当你的才华还撑不起你的梦想时》读后感
查看>>
Redis高可用哨兵原理
查看>>
chroot directory
查看>>
文件系统的简单操作
查看>>
xtrabackup 安装
查看>>
一步步学习EF Core(1.DBFirst)
查看>>
php 例子 如何转换ISO8601为 utc时间
查看>>
第四次实验
查看>>
IOS UIView 03- 自定义 Collection View 布局
查看>>
instantclient的使用入门
查看>>
【数据结构作业心得】4-1 指针笔记
查看>>
oracle拼接字段用||
查看>>
rabbitmq /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found
查看>>
编程语言学习清单
查看>>
IO流的复习笔记
查看>>
MySQL Connector Net连接vs2012问题
查看>>
LeetCode – Refresh – Merge Intervals
查看>>
UDP编程简单案例
查看>>
Exce信息提取
查看>>