美文网首页高级UI
Android Kotlin零基础手把手教开发新闻今日头条(项目

Android Kotlin零基础手把手教开发新闻今日头条(项目

作者: a69dd9dab794 | 来源:发表于2019-11-14 17:20 被阅读0次

    产品文档介绍

    目录介绍

          1.关于项目App整体架构

          1.1项目整体架构

              1.1.1 语言选择

              1.1.2 目前常见的架构

              1.1.3  MVP架构优点及缺点

              1.1.4 目前项目使用架构

            1.2.主要的技术要点

              1.2.1  布局常用及技巧技术

              1.2.2  复杂页面展示及数据渲染

              1.2.3  自定义控件编写及使用

              1.2.4  数据结构及网络数据使用

              1.2.5  常见业务流程处理

              1.2.6  工具自定义封装使用

              1.2.7  整体架子的搭建

              1.2.8  视频加载技术

              1.2.9. 上传文件

          1.3 主要开源框架介绍

              1.3.1 网络请求框架

                1.3.2  注解框架

                1.3.3  图片加载框架

                1.3.4  api 23以后权限申请

                1.3.5  事件总线框架

                1.3.6  第三方视频加载控件

                1.3.7 第三方获取日期控件

                1.3.8 第三方获取相册或者拍照图片

        2 .项目中的代码规范

            2.1 关于包名,类名,方法名等命名

                2.1.1 包名与分包

                2.2.1 日志统开关,平时测试环境,上线关闭

                2.3 资源文件string,color,dimen

          3.项目中的总结分析

              3.1 总结

          4.常见问题思索

            4.1 业务代码避免耦合度过高

            4.2 如何解决问题

            4.3 尽量少写无用代码

          5.参考说明

              5.1 参考链接

    1.关于项目架构

    1.1 该项目App整体架构

    1.1.1语言选择

    Android 开发目前又两种可选语言,Java Android中使用多年生态较为完整也是比较强大的一种存在,Kotlin谷歌Android 官方语言也是目前主推的趋势,跟java比较生态相对不完整,不过现在很多人在使用,而且代码编写时它由于语法糖比Java简短,所以你能用少量的代码完成一个功能,同时它进行了诸多优化,可以放心使用,我们本次项目选择语言为Kotlin。

    1.1.2 市面常见的架构

    目前存在常见架构有MVC,MVP,MVVM等。

    1.1.3  MVP架构优点及缺点

    MVP框架由3部分组成:View负责显示,Presenter负责逻辑处理,Model提供数据。

    View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity或者fragment)

    Model:负责存储、检索、操纵数据

    Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。

    View interface:需要View实现的接口,View通过View interface与Presenter进行交互

    优点:(1)MVP相对于MVC来说降低了耦合 为什么真么说呢? MVC中我们把业务数据交织在一起,也就是activity或fragment中,那么我们后期需要去修改需求的时候会引发修改难度大改一处而动全身,所以工程量会比较大总结下来就是(降低耦合),

    (2)业务模块相对来说比较清晰,以往我们很 多业务交织在一起,所以比较模糊不太容易分辨我们具体业务,MVP能很容易看出我们的业务分层,也为我们开发后期维护有很大帮助,总结下来就是(模块划分清晰)

    (3) 很多时候我们的业务模块相似,那么这个时候我们是不是想到一点就是代码复用。少写一部分代码可以提高开发效率,然而MVC就解耦性比较差,就大大减少代码复用,开发的灵活性比较差,总结就是(代码复用及灵活性高)

    这些呢是个人对于MVP的一些观点当然还有其他的,这几点相对来说比较突出所以你们也可以继续探索。

    缺点:(1)那么说了这么多优点我们来看看缺点,我们Persenter和View交互我们需要通过接口实现,那么各个业务不同会造成接口过多,加上我们的Model 那么代码中会相对比较繁琐,这样会使项目体积变大,后期也会有麻烦,总结下来就是(接口多项目体积变大)。

    (2) View和Persenter 会频繁的交互那么如果我们的View发生变化时相应Persenter也要做出改变(交互频繁)

    1.1.4  目前项目使用的架构

    准备使用架构是MVP,Rxjava+Retrofit+OkHttp是网络请求框架,MVP是由MVC的基础演化而来,解决了MVC不少的缺点,相对MVC来说MVP提升解耦更好,业务分层清晰等特点,而以往MVC是把activity、fragment作为的controller和view使用,MVP的model相对于MVC是一样的,而activity和fragment不再是controller层,而是纯粹的view层,所有相关业务操作全部交由presenter层处理,这样做到一个相对的分离。

    1.2 主要的技术要点

    1.2.1 布局常用及技巧技术

      布局中主要的一点就是尽量的层级嵌套不要过于复杂,因为渲染时一层一层往下渲染所以层级过于复杂的话那么耗时相对比较长,根据设计图的布局选择相对比较合适的布局方式,依然可以使用android最新的约束布局实现一个层级布局,这当中会涉及到约束布局使用,包括居中,向上,下,左,右,平分布局等,具体可以参考链接地址:

    https://ke.qq.com/course/455717?tuin=9cbdbb86

      1.2.2 复杂页面展示及数据渲染

    对于复杂页面,我们选择是自带控件RecyclerVIew 支持扩展性强,功能强大 ,所以我们可以用它的多类型扩展特性完成我们的复杂布局,同时一个控件展示渲染也为后期业务变化修改提供便利性,具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

      1.2.3  自定义控件编写及使用

      通常项目中控件不能满足我们平时开发,那么这时候我们需要自定义一些控件来满足我们开发,自定义相对比较复杂,要求掌握知识比较全面一些,我们可以根据自己的需求来定义控件

      这次我们自定义中涉及到事件分发,动画,自定义流程,事件回调等,具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

      1.2.4  数据结构及网络数据使用

      数据是我们开发中相对比较重要的一个知识点,我们View需要数据来渲染才会使我们的视图有生命,完成我们的页面逻辑及业务,项目中我们提供了真实企业级的项目接口也封装了网络    请求工具,具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

      1.2.5 常见业务流程处理

      项目的最终目的都是我们为了实现我们的业务,项目中要根据产品提供的文档来对业务做一些具体的操作,我在项目做了企业级的项目业务处理,虽然不是同一个项目但是万变不离其中

      处理方式无非就是我们的流程控制及回调处理,具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

      1.2.6 工具自定义封装使用

      对于项目中我们需要用到一些方法,那么如果很多地方都用到那么写一次,这样会代码会比较繁琐, 可以把这些方法写成我们公用类静态方法以提供给其他地方调用,比如我们的时间格式化,获取手机参数,转化单位,获取屏幕宽度,高度,像素密度等,具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

    1.2.7 整体架子的搭建

      我们要去做项目的时候那么首先是有原型,所以最开始都有一个整体中心架子最后围绕这个架子开始编写,我们这次项目整体是以首页的四个标签为基础架子,然后扩散到其他的业务点,我们使用的是TabLayout 结合我们ViewpPage以及Fragment完成了可切换的主页架子,其中设计他们的使用比如我们怎么给TabLayout添加ViewPage,怎么给ViewPage添加多个Fragment等,具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

    1.2.8  视频加载技术

    项目中加载视频是个头疼的问题,我们通常加载时涉及到东西比较多如果我们使用自带的控件那么要考虑缓存,加载时间,优化压缩,内存等,我们这次没有使用自带的视频控件,用了一个第三方的视频控件,具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

    Android Kotlin零基础手把手教开发新闻今日头条

    1.2.8  上传文件

    平时使用上传图片的业务我们会涉及很多,那么单独上传时可能没问题,当参数和图片或者视频一起上传时就显得很麻烦,这儿我们使用了一下我们文件上传到服务器,

    具体可以参考链接地址:https://ke.qq.com/course/455717?tuin=9cbdbb86

    1.3 主要开源框架介绍

        1.3.1 网络请求框架

          Retrofit: 底层基于OkHttp 实现,Retrofit 负责请求的数据和请求的结果,使用接口的方式呈现,OkHttp 负责请求的过 程,RxJava 负责异步,各种线程之间的切换

          OkHttp: 也是Square 开源的网络请求库

          RxJava:RxJava 一个在 Java VM 上使  用可观测的序列来组成异步的、基于事件的程序的库,总之就是让异步操作变得非常简单。

          RxJava + Retrofit + okHttp 已成为当前Android 网络请求教优的选择。

        1.3.2  注解框架

        目前常见的注解框架:

        XUtils:xutils是通过反射来实现的,跟Butterknife的是它需要手动实现注解

        AndroidAnnotations:该框架的原理跟Butterknife一样

        ButterKnife: 自动生成注解与类属性,Butterknife目前支持的注解有: View绑定,资源绑定,事件绑定。

        1.3.3  图片加载框架

        ImageLoader:异步加载本地及网络图片,同时实现缓存

        Picasso:不仅实现了异步加载图片,还是决解了图片加载的一些问题,错位,压缩,自带二级缓存等

        Glide:Glide具有高效 获取、解码和展示视频剧照、图片、动画等功能。

        1.3.4  api 23以后权限申请

        权限管理,直接使用谷歌原生权限框架

        1.3.5  事件总线框架

        activity,fragment,service等不同组件直接通信一直是个头疼的问题,那么我们使用事件总线来进行通信

      EventBus:EventBus逻辑非常的清晰,代码之间高度解耦,在进行组件、页面间通信的时候,是很好的选择,

      具体使用方法可以参考地址:https://github.com/greenrobot/EventBus

    1.3.6  第三方视频加载控件

        高度自定义的开源安卓视频框架,当然确实很好使用,

      具体使用方法可以参考地址:https://github.com/lipangit/JiaoZiVideoPlayer

    1.3.7  第三方日期滚动控件

      这是一款仿iOS的PickerView控件,有时间选择器和选项选择器,

      具体使用方法可以参考地址:https://github.com/Bigkoo/Android-PickerView

    1.3.8  第三方照片选择器

    一款针对android平台下的图片选择器,支持从相册或拍照选择图片或视频、音频,支持动态权限获取、裁剪(单图or多图裁剪)、压缩、主题自定义配置等功能、适配android 6.0+系统的开源图片选择框架。  具体使用方法可以参考地址:https://github.com/LuckSiege/PictureSelector

    2 .项目中的代码规范

            2.1 关于包名,类名,方法名等命名规则

                2.1.1 包名与分包规则

                包名:com.xxxx.project 例如:com.ousang.toutiao 其中xxxx是咱们企业名称,最后是项目名称

                分包以如下图:   

                2.2.1 环境统一开关,平时测试环境,上线关闭

                在我们的管理类中设置一个方法控制我们的环境,平时测试时使用测试环境,上线时更改为上线环境

                2.3 资源文件string,color,dimen

                    (1)对于项目中的字符串我们统一写入到清单文件string中以规范化,后期更改只需找到清单文件更改即可

                  (2)因为设计颜色相对会比较繁多,所以项目中的颜色值我们统一写入到清单文件color中以规范化,后期更改只需找到清单文件更改即可

                  (3)同样尺寸我们统一写入到清单文件dimen中以规范化,后期更改只需找到清单文件更改即可

      3.项目中的总结分析

              3.1 总结及收获

          (1)项目中存在问题时要多思考问题原因,因为这样才能收获,不要盲目搜索,带着问题关键去寻找。

          (2)完结项目后要回头去看代码是否可以更完美,尝试优化。

          (3)和他人分享,每个人的想法有可能是一种收获

    4.常见问题思索

            4.1 业务代码避免耦合度过高

            平时开发时尽量避免项目的耦合度过高,Persenter与View尽量做到耦合低,  避免日后的维护修改麻烦增加工作量,

            4.2 如何解决问题

            开发时会遇到很多的问题,那么我们可以借助搜索引擎的寻找答案,但是你要能看问题的核心,报错时我们需要看我们日志然后找到问题所在倒推问题发生源,如果是业务出错时回头去仔细查看文档分析,检查代码然后调试断点查处问题,总之就是不要慌,镇定。

            4.3 尽量少写无用代码

            我们布局,业务代码,工具,能抽取出来成为一个公用的时,就抽取,就公用,因为这部分相同代码实际上没有意义,到还繁琐,浪费时间或者都可以放进一个公用的包内。

    5.参考说明

          5.1 参考链接

    Android App的设计架构:MVC,MVP,MVVM与架构经验谈:

          https://www.tianmaying.com/tutorial/AndroidMVC

    浅谈 MVP in Android:

          https://blog.csdn.net/lmj623565791/article/details/46596109

          刘望舒大神,Android架构(一)MVP全解析:

          http://blog.csdn.net/itachi85/article/details/52293236

          kotlin 官方

          https://www.kotlincn.net/

    相关文章

      网友评论

        本文标题:Android Kotlin零基础手把手教开发新闻今日头条(项目

        本文链接:https://www.haomeiwen.com/subject/yanrictx.html