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

访客3年前黑客文章807

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。

相关文章

好友定位,找黑客查看微信记录,找黑客改资格证成绩

将上面 3 个文件放在同一目录,并运用javac *.java进行编译,然后运转java CallService即可得到运转成果。 他就会显现在页面上 -t界说暗码输出格局标题需...

上海商务私人订制-校花酒店哪家强

上海商务私人订制-校花酒店哪家强 伴游描述:最近有很多朋友在商务预约网后台留言,想了解关于上海商务私人订制信息。于是小编通过百度、知乎、文库等途径,总结了以下关于上海商务私人订制的全部内容。希望对...

hold啥意思(Hold 除开握住以外还有什么意思?)

hold啥意思(Hold 除开握住以外还有什么意思?)

「 hold 」的中文翻译除开握住、举办….等基础含意,也有什麽其他的英文使用方法呢?当hold跟其他词汇构成语句时,能够有很多种多样含意,比如说等一下、稍安勿躁、且慢…这些。 to have...

黑客帝国矩阵重启超清迅雷(黑客帝国矩阵重启超清迅雷下载)

黑客帝国矩阵重启超清迅雷(黑客帝国矩阵重启超清迅雷下载)

本文导读目录: 1、黑客帝国3:矩阵革命高清完整版下载地址 2、能发下黑客帝国3:矩阵革命.720p.国英双语.BD中英双字的种子或下载链接么? 3、黑客帝国1~3高清迅雷下载 4、黑客帝...

黑客html标签(标签html代码)

黑客html标签(标签html代码)

本文导读目录: 1、怎么把黑客帝国的这段代码放在html主页的背后 2、急!HTML的不安全标签 3、html后缀的网页格式怎么入侵 4、html标记和属性都有哪些呢 5、HTML的特...

皮肤黑的人染什么颜色的头发,推荐几款显白的

皮肤黑的人染什么颜色的头发,推荐几款显白的

分享最新的时尚资讯,穿搭建议,美妆技巧,发布最前沿,最权威的时尚信息!蓝迪时尚是蓝迪老师搜集全球时尚资讯,是全球首家定位高端时尚资讯的移动媒体,专注为您在掌上创造最愉快的阅读体验。 皮肤偏黑适合染:...