讲解Bento Android架构的开源系统关键点

访客4年前黑客文章818

Bento是一个用以搭建模块化设计Android用户页面的开源框架,由Yelp产品研发。在过去的一年中,研发人员早已看到了在最重要的模块化设计UI开发设计上应用Bento能够提升开发者的工作效能和设计产品的协调能力。在本文中,研发人员将详尽表述Bento的原理,及其Yelp开源系统Bento Android架构,用以模块化设计UI开发设计的内情。

什么叫Bento?

Bento桌面上的信息内容以信用卡的方式展现给用户,从未接来电到截屏提示,从音乐播放到日历行程安排。得到受权后,Bento会置入手机联系人、日历、Email、访问搜索记录和音乐播放纪录等,记牢用户的一些基本资料和本人爱好,在下一次用户开展一些姿势的情况下,立即向云服务器传送数据随后给予相对意见反馈,用户乃至不用专业免费下载相对的 App 。Bento的另一大闪光点是,这款第三方 Launcher 还含有强烈推荐作用。从用户访问爱好或潜在性要求考虑,出示强烈推荐类服务项目的运用有很多,例如Google Now(它是Google在I/O开发人员交流会上随安卓4.1系统另外发布的一款运用,它会全方位掌握你的各种各样习惯性和已经开展的姿势,并运用它所掌握的来给你出示基本信息)。但与他们不一样的是,Bento全部服务项目全是在订制化的手机界面进行的,这类平台式的作用触发器原理立即决策了用户应用手机上的 *** 。

因此 ,Yelp的开发者用Bento品牌形象地指令了这一架构。 Bento的字面意思是便当的意思,说白了,Bento架构便是要随时随地便捷用户。Bento盒说白了便是一个配有各种各样隔开设备的器皿,用以将不一样的“美味可口”相互分离。

很多Android应用软件都是有一个根据列表的用户页面,应用RecyclerView来表明程序流程的视图。RecyclerView是support:recyclerview-v7中出示的控制,最少兼容到android 3.0版本号。RecyclerView是一种类似ListView的一个拖动列表,可是RecyclerView和ListView对比,RecyclerView比ListView更强,RecyclerView适用横着拖动,RecyclerView沒有点击事件,必须自身添加,还能够作出各种各样酷炫的实际效果动漫,更合乎高内聚力低耦合。

在更底层等级上,RecyclerView根据引入井然有序的数据信息列表并在显示屏上为该列表中的每一个数据项建立视图来工作中。假如你的列表由同质性数据信息类构成,那麼这类方式十分合理。可是如果你必须在列表中管理 *** 无尽总数的数据信息和视图类时,这类方式的缺点就曝露出来。假如你必须在除RecyclerView以外的用户页面中应用同样的视图类(比如ViewPager或ListView),这类方式也会不太好用。

Bento被设计方案出去的目地,便是致力于根据出示一个架构来管理 *** 解决不一样视图类的多元性及其列表中每一个视图的动态性部位来处理之上出現的难题。 Bento还可用以管理 *** 别的父视图类(比如ViewPagers和ListViews)中的视图,但另外Bento也保存了RecyclerView的优点(如ViewHolder和视图收购 )。

Bento怎样运作?

Bento将不一样的视图类和与表明这种视图类并与之互动的逻辑性排序到“组件”中,组件能够是以简易文字视图到由别的组件构成繁杂组件。

组件的关键是出示数据项的单独原素,关系的ComponentViewHolder类将使视图持续inflate化并将出示的数据项关联到繁杂的视图中。ViewHolder一般 还会继续将组件或一些presenter关联到视图,以解决一切用户互动。

为了更好地演试组件的原理,我能在下面列举 要表明在显示屏上的组件的数据流分析数据图表。

1.更先,底层页面视图必须表明內容,因而它规定ComponentController展现一个视图。

2.ComponentController必须将升级的视图回到到底层页面视图,因而,根据控制板维护保养的內部组件列表,它根据在网页页面视图必须的部位对列表中的组件启用getHolderType来建立一个新的ComponentViewHolder。此方式会回到ComponentViewHolder类,随后根据反射面实例化此类。

3.因为它是组件之一次建立视图,因而必须对合理布局开展inflate化解决。 因此,ComponentController必须在新创建的ComponentViewHolder上启用inflate方式来建立视图。

4.下面,研发人员必须应用数据信息添充视图,并保证它将对用户键入做出回应。在建立的ComponentViewHolder案例上启用bind方式,该方式出示了一个数据项和一个presenter。他们是根据启用相对组件的getPresenter和getItem方式的ComponentController形成的。presenter是实行一些领域模型或解决用户互动的一切目标。在很多状况下,它是Component类自身。数据项一般 是一个数据信息类,在其中包括要表明给用户的视图特性和字符串数组。

5.视图将应用数据项开展升级,而且恶性事件侦听器将关联到presenter,随后将视图传送回要展现的底层页面视图。

组件在父亲视图中的次序由ComponentController决策,而这恰好是Bento盒中的奇妙之处,它容许研发人员动态性地为订单信息加上、删掉和 *** 组件,这如同在一个简易的列表算法设计中实际操作一样。它还出示了一个抽象概念实际操作,研发人员能够应用它来将此作用运用于不一样的视图类,比如RecyclerView,ListView,ViewPager和别的很多别的类。比如,recoverclerviewcomponentcontroller解决与recoverclerview类和电源适配器通讯的繁杂编辑,以明确跨距和部位,促使在列表中管理 *** 不一样的组件集越来越比较简单。研发人员还能够应用ComponentGroup建立不一样组件的排序,以将组件的逻辑性排序储存在列表中。

Bento架构能够轻轻松松地将繁杂的页面溶解为一组便于了解、模块化设计、动态性和可检测的组件。

实际实例

让研发人员看一个怎样搭建一个只展现一些文字的更底层组件的实例,下边是一个比较简单的Component类的实例:

class ExampleComponent(private val text: String): Component(){

override fun getCount()=1

override fun getPresenter(position: Int)=this

override fun getItem(position: Int)=text

override fun getHolderType(position: Int)=ExampleViewHolder::class.java

}

在图中中,你能见到在其中早已遮盖了抽象性组件类的一些方式。让研发人员来讲解一下在其中的每一个方式:

1.getCount:组件能够在內部由一系列项构成,在之上的简易实例中,在其中就只有一个新项目。假如必须,每一个部位的组件中的每一个新项目都能够有着自身的presenter、数据项和ViewHolder类,但一般 更好是将其溶解为不一样的组件,除非是全部新项目都具备同样的ViewHolder和presenter。

相关文章

电影完整版免费看黑客帝国(黑客帝国 电影在线观看)

电影完整版免费看黑客帝国(黑客帝国 电影在线观看)

本文目录一览: 1、黑客帝国1,2,3讲的是什么? 2、《黑客帝国(1999)》免费在线观看完整版高清,求百度网盘资源 3、《黑客帝国动画版》免费在线观看完整版高清,求百度网盘资源 黑客帝国...

微信怎么加人快又多(微信快速加人方法技巧介绍)

微信怎么加人快又多(微信快速加人方法技巧介绍)

挪动互连网时期,许多盆友都逐渐从微信这个交友软件做买卖,那麼怎样快速的加进微信朋友?是大家必须去思索的一个问,今日讲一下自己的一些工作经验,期待大伙儿能有一定的获。 一丶将你的微信号关联...

复韵母(18个复韵母是哪些?)

什么是复韵母(18个复韵母是哪些?) 声母是:b、p、m、f、d、t、n、l、g、k、h、j、q、x、zh、ch、sh、z、c、s 、 y、w、r. 单韵母是:a、o、e、i、u、v. 复韵母是...

黑客找电话-世界最著名的黑客大战(中国最著名的黑客大战)

黑客找电话-世界最著名的黑客大战(中国最著名的黑客大战)

黑客找电话相关问题 求黑客高手qq联系方式相关问题 黑客怎么用给了软件 苹果怎么当黑客(苹果手机被黑客黑了) g...

如何找黑客帮忙查通讯记录-黑客攻击物理什么意思(我的世界黑客什么意思)

如何找黑客帮忙查通讯记录-黑客攻击物理什么意思(我的世界黑客什么意思)

如何找黑客帮忙查通讯记录相关问题 怎么联系黑客帮忙盗号相关问题 自学成才的黑客看什么书 全国酒店入住查询系统(全国酒店入住查询)...

糙米是什么?常食对人体有哪些好处

糙米是什么?常食对人体有哪些好处

糙米是稻谷脱去外保护皮层稻壳后的颖果,内保护皮层(果皮、种皮、珠心层)完好的稻米籽粒,由于内保护皮层粗纤维、糠蜡等较多口感较粗,质地紧密,煮起来也比较费时,但其瘦身效果显著。与普通精致白米相比,糙米维...