安卓项目架构与技术选型

技术选型
技术选型:主要考虑网络层的的框架选型和图片加载库的选型。
技术选型要充分了解每种技术的优缺点,最终由项目需求来决定。要了解每个框架的底层实现原理,这些原理决定了框架的优缺点。
APP的框架:网络请求框架、app的大致架构(分包、BaseActivity的封装、工具类)、图片加载框架的封装、数据库操作的封装,采取哪种开发模式(mvc/mvp/mvvm)等


一、网络请求框架的封装:
封装网路请求框架,要考虑的问题:
1)发送网络请求之前,先判断网络连接状况。
2)网络请求是单线程的还是并发的,单线程的网络请求可能会造成网络请求阻塞,并发请求比较好。
3)不同环境对应不同的网络请求方式(post/get,不同的站点)。
4)设置数据加载进度条,必须在创建了网络请求对象之后,程序一步一步往下执行。
自定义dialog的样式、dialog显示与消失的时机。
5)只要是第三方框架中的网络请求类,一定会有网络请求开始、正在加载中、网络请求结束等网络请求生命周期方法,一般用于控制加载进度对话框的显示与隐藏
public class HttpUtils extends AjaxCallBack<Object>{},继承AjaxCallBack类主要是为了使用其中的生命周期方法
6)网络请求框架,如果在Activity中进行回调的时候,如果传递this可能会出现错误,比如如果一个页面出现多个网络请求,只能通过创建匿名内部类进行回调。

7)网络请求肯定是异步的,在另外一个线程里面执行

8)网络请求中,把变化的、动态的抽取出来,比如请求参数、请求地址;把静态的,不可变的封装起来,不对外暴露,比如相同的请求头、公共的请求参数。

        //把变化的都暴露出来,把网络请求的细节都隐藏掉
        NetUtils utils=new NetUtils();
        utils.isShowDialog(true);//是否显示对话框
        utils.isPost(true);      //请求方式
        utils.isFullUrl(false);  //用于切换站点,测试站点、线上站点、接口站点。
        utils.sendRequest(url,params,new ResponseCallBack());

公共请求参数的处理、统一错误处理、公共的返回参数。
网络请求框架的底层都是HttpClient和HttpURLConnection?
1)Volley的底层使用的是HttpClient+HttpURLConnectionz
2)OkHttp使用NIO更加高效


二、图片加载框架:
图片加载流程:加载二进制文件流---->解码成图片
图片的编码和解码(二进制流和图片的相互转化) 图片编解码格式的选择
封装自己的ImageLoader


项目架构:
最重要的是要有分层意识,不同的问题在不同的层级进行处理(不同的层级具备不同的功能)。把代码拆分。
要考虑代码的可扩展性,易维护性,低耦合性。


技术上的实现:
1)按照哪种模式进行分包(功能模块还是MVC)。
2)BaseActivity的抽取(抽取公共的、可复用型的代码)。
3)BaseAdapter的抽取,抽取通用的顶层接口,规范adapter的编码。
4)采用哪种开发模式(MVC/MVP/MVVM),尽量把业务逻辑性的代码从Activity中抽取出来,通过接口解耦,把网络请求的数据返回到主线程里面。


MVP模式的特征:
优点
1.层次分明,各层级之间都不管对方如何实现,只关注结果;
2.在视图层(Presentation Layer)使用MVP架构,使原本臃肿的Activity(或Fragment)变得简单,其处理方法都交给了Presenter。
3.易于快速迭代,基于代码的低耦合,只需在业务逻辑上增加接口,然后在相应的层级分别实现即可,丝毫不影响其他功能。
无论从架构还是代码上看,分层都是三层:视图层(Presentation Layer)、控制层(Domain Layer)、数据流层(Data Layer)。
层级之间通过添加接口层作为分隔 实现解耦。
缺点
太重了,实现一个小小的功能,要建立太多的类和接口。


解耦--面向接口编程(如果想要降低耦合,就是用面向接口编程)


移动终端开发的入门易,就不可避免的精通难。在毕业写Android几年后开始从如何实现,转而思考怎么更好的实现。如何抽象,如何接口,如何实现可扩展?
你的精力应该花在拆解业务,分成若干个library,如何集成如何分工上面。
把代码耦合降低,能抽象的抽象,提高代码的复用能力。MVC模块各司其职,不要参杂无关的东西。其实最主要的就是对业务的熟悉吧,把要实现的功能进行合理划分抽象基本就可以写出不错的代码了。
当一个只需要做较为简单页面交互和展示和数据交互逻辑,使用MVP,MVVM就足够了。
做架构,应该知道怎么分层,把复杂的问题简单化,尽量让模块是可复用的。要了解设计模式,了解MVP,MVVM,MVC,了解AOP,响应式编程,驱动模型,插件框架等。
Android本身就是一个MVC框架,Java也是一个重量级的语言。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值