$(function(){ dataAnimate(); (function($,lanno){ if(lanno === "" || lanno === "default"){ return ''; } $(".w-languege").each(function(){ $(this).find("a").each(function(){ if($(this).data("lanno") === lanno){ $(this).addClass("cur"); }else{ if($(this).hasClass("cur")){ $(this).removeClass("cur"); } } }); }); })(jQuery,"cn"); });
大型 Android 项目架构最佳实习(倡导保藏)
发布时间:2024-03-23 20:44:50

  诈欺 Xlog 树立客户端运转时光志系统,长途日记按需回捞,以打点的体例记实环节履行流程。

  RecyclerViewExt :一行代码急迅完毕增添笔直盘据线,网格盘据线;

  Flow 实在和 RxJava 很像,特地轻易,用它来做收集哀告特别干脆。

  咱们都领略原生的 WebView 存正在良众题目,操纵腾讯X5内核 WebView 实行封装,兼容性,牢固性,安适性,速率都有很大的晋升。

  MMKV 是基于 mmap 内存映照的 key-value 组件,底层序列化 / 反序列化操纵 protobuf 完毕,职能高,牢固性强。操纵大略,助助众经过。

  异步职责启动器,温柔地打点 Application 中同步初始化职责题目,有用削减 APP启动耗时。

  模块化和组件化最昭着的区别即是模块相对组件来说粒度更大。一个模块中大概蕴涵众个组件。正在划分的光阴,模块化是营业导向,组件化是性能导向。组件化是设立修设正在模块化思念上的一次演进。

  XLog 是一个高职能文本存储计划,正在确凿境遇中经受了微信数亿级此外检验,具有很好的牢固性。因为其是操纵C道话来完毕的,占用职能忧、内存小,存储速率速等利益,助助众线程,以至众经过的操纵,助助按期删除日记,同时,具有特定算法,实行了文献的压缩,以至能够装备文献加密。

  使得模块能够正在集成和独立调试之间切换性情。正在打包时是 library,正在调试是 application。

  组件化&模块化有利于营业模块分别,高内聚,低耦合,代码范围了然。有利于团队互助众线开荒,加快编译速率,升高开荒出力,经管特别轻易,利于保护和迭代。

  这或者是一个缩影,可是麻雀虽小,五脏俱全,这决定能给行家带来少少念法和推敲。当然这个项主意性能并未一共完美,由于咱们的主意不是制一个 WanAndroid 客户端,而是练习搭修和操纵 Kotlin+协程+Flow+Retrofit+Jetpack+MVVM+组件化+模块化+短视频 这一种架构,更好的晋升本身龙8国际

  //删除指定item 操纵主键将转达的实体实例与数据库中的行实行结婚。假如没有具有一致主键的行,则不会实行任何更改

  //通过LiveData以察看者的体例获取数据库数据,能够避免不需要的NPE

  那么其他模块就能够通过 LoginServiceProvider 操纵 iLoginService 对外供给揭发的本事。固然看起来这么做会显得更庞杂,简单工程大概特别适合咱们,每个类都能直接拜访,每个法子都能直接移用,可是咱们不行限定于单人开荒的境遇,正在实质场景上众人合作是常态,模块化开荒是主流。

  通过组件化,模块化拆分,完毕项目更好解耦和复用, ARouter 完毕模块间通讯;

  APP 壳工程刻意打包境遇,署名,搅浑法规,营业模块集成,APP 中心等装备等处事,寻常不蕴涵任何营业。

  Android Jetpack是一组 Android 软件组件、器材和指南,它们能够助助开荒者构修高质地、牢固的 Android 行使标准。Jetpack 中蕴涵众个库,它们旨正在处分 Android 行使标准开荒中的常睹题目,并供给相同的 API 和开荒体验002cc全讯开户送白菜

  //创修可以 边播放边缓存的 当地资源加载和http收集数据写入的工场类

  这里首要用于首页视频列外缓存数据,与 LiveData 和 Flow 勾结打点能够避免不需要的 NPE,能够监听数据库外中的数据的改变,也能够和 RXJava 的 Observer 操纵,一朝爆发了 insert,update,delete等操作,Room 会自愿读取外中最新的数据,发送给 UI 层,更始页面。

  项目中通过以营业为维度把 App 拆分成主页模块,登录模块,探求模块,用户模块,视频模块等,彼此间不行够拜访不行够动作依赖,与此同时他们联合依赖于根柢库,收集哀告库,大众资源库,图片加载库等。假如还需求操纵到启动器组件、Banner组件、数据库Room组件等则独自按需增添。

  无论是模块化或者组件化,它们本色思念都是一律的,都是化整为零,化繁为简,两者的主意都是为了重用息争耦,只是叫法纷歧律。

  宿主 App 中只要一个 Application,全盘营业被拆分为各个 mod 模块和 lib 组件库。对少少性能组件实行封装抽取为 lib,给上层供给依赖。mod 模块之间没有职责依赖干系,通过 Arouter 实行通讯。

  注视:Room 数据库中的 Dao 中界说数据库操作的法子必然要确保用法精确,不然会导致 Room 编译时天生的完毕类过错,编译欠亨过等题目。

  数据拜访对象 (DAO):供给您的行使可用于盘问、更新、插入和删除数据库中的数据的法子。

  BaseActivity :封装了通用的 init 法子,初始化组织,加载弹框等法子,供给了原始的增添组织的形式;

  首要借助阿里的道由框架 ARouter 完毕组件间通讯,把对外供给的本事,以接口的体例暴显现去。

  ViewExt :    View 扩展类,完毕点击防抖,增添间距,修立宽度,修立可睹性等等;

  ViewModel 具备人命感知本事的数据存储组件。页面装备更改数据不会损失,数据共享(单 Activity 众 Fragment 场景下的数据共享),以人命周期的形式经管界面联系的数据,经常和 DataBinding 配合操纵,为完毕 MVVM 架构供给了强有力的助助。

  切合阿里巴巴 Java 开荒典型和阿里巴巴 Android 开荒典型,并有优异的诠释。

  存疑:至于模块独自编译独自运转,这种是一个伪需求,实质上势必存正在众个模块间通讯的场景。否则跨模块的任事提取和获取,初始化职责,模块间的联结测试该怎样处分呢?一个模块运转后需求和其他的模块通讯,例如对外供给任事,获取任事,与之联系联的模块假如没有运转起来的话是无法操纵的。

  项目中以性能维度拆分了启动器组件、Banner组件、数据库Room组件等组件。模块化&组件化拆分后工程图:

  如需求更详尽的代码能够到项目源码中查看,所在不才面给出。因为期间急急,项目中有局部性能尚未完美,或者局部完毕形式有待优化,例如 依赖注入Hilt,相机性能CameraX,权限打点Permissions, 分页打点Paging 等等。项主意络续迭代更新已经是一项坚苦历久战。

  与此同时还需求正在 suorceSets 下保护两套 AndoidManifest 以及 Javasource 目次,这个不只困难并且每次更改都需求同步一段期间。以是这种散播的模块化独立编译的体例常见问题,是否真的适合就仁者睹仁了。

  //更新某个item,不指定的entity也能够,会遵照你传入的参数对象来找到你要操作的那张外

  项目操纵 MVVM架构形式,基础上听命 Google 引荐的架构,关于 Repository,Google 以为 ViewModel 仅仅用来做数据的存储,数据加载应当由 Repository 来结束。通过 Room 数据库完毕对数据的缓存,正在无收集或者弱网的处境下优先展现缓存数据。

  //创修缓存,指定缓存地方,温顺存政策,为近来起码操纵准绳,最大为200m

  项主意收集哀告封装供给了两种形式的完毕,一种是 协程+Retrofit+ViewModel+Repository ,像官网那样加一层 Repository 去经管收集哀告移用;另一种形式是通过 Flow 流配合 Retrofit 更温柔完毕收集哀告,比照官网的做法特别干脆。

  项目中操纵 MMKV 保留用户联系音信,网罗用户登录 Cookies,用户名称,手机号码,探求史乘数据等音信。

  之前不停念写个 WanAndroid 项目来褂讪本身对 Kotlin+Jetpack+协程 等常识的练习,可是不停没有期间。这里从新活跃起来,从项目搭修到结束前前后后用了两个月期间,通常期间斗劲少,基础上都是只可诈欺琐细的期间来写。但不再是念写一个大略的玩安卓项目,我从众个大型项目中练习和吸收阅历,从0到1打制一个切合大型项主意架构形式。

  图片加载诈欺 Glide 实行了大略的封装,对 ImageView 做扩展函数打点:

  行家好,我是皇叔,近来开了一个安卓进阶涨薪锻炼营,能够助助行家冲破技巧&职场瓶颈,从而渡过难闭,进入心仪的公司。

  一个轻量级 orm 数据库,本色上是一个 SQLite 空洞层。操纵特别大略(Builder 形式,相像 Retrofit),通过注释的体例完毕联系性能,编译时自愿天生完毕类 IMPL。

  //创修exoplayer播放器实例,视屏画面衬托工场类,语音拔取器,缓存左右器

  组件化之后就无法直接拜访其他模块的类和法子,这是个斗劲特别的题目,就像正本能够直接操纵 LogintManager 来拉起登录,推断是否已登录,可是这个类依然被拆分到了 mod_login 模块下,而营业模块之间是不行彼此动作依赖的,以是无法正在其他模块直接操纵 LogintManager 。

  Navtgation 动作构修行使内界面的框架,要点是让单 Activity 行使成为首选架构(一个行使只需一个 Activity),它的定位是页面道由。它处分了 View 和数据之间的双向绑定;削减代码模板,不再需求写findViewById;开释 Activity/Fragment,能够正在 XML 中结束数据,事故绑定处事,让 Activity/Fragment 特别亲切焦点营业;数据绑定空安适,正在 XML 中绑定命据它是空安适的,由于 DataBinding 正在数据绑定上会自愿装箱和空推断,以是大大削减了 NPE 题目。

  ExoPlayer 是 google 推出的开源播放器,首要是集成了 Android 供给的一套解码体系来解析视频和音频,将 MediaCodec 封装地特地完美,酿成了一个职能卓着,播放牢固性较好的一个开荒播放器,助助更众的视频播放形式(蕴涵 DASH 和 SmoothStreaming ,这2种 MediaPlayer 不助助),通过组件化自界说播放器,轻易扩展定制,历久的高速缓存,别的 ExoPlayer 包巨细简捷,接入大略。大型 Android 项目架构最佳实习(倡导保藏)

TOP
$(function () { $(window).scroll(function () { if ($(this).scrollTop() > 20) { $('.w-service-fixed .service-item-top').show(); } else { $('.w-service-fixed .service-item-top').hide(); } }); });