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

访客3年前黑客文章806

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。

相关文章

去哪里找网络高手「qq破解黑客联系方式」

  找一个网络高手求助( 找一个网络高手)   GPS是英文Global Positioning System(全球定位系统)的简称。GPS起始于1958年美国军方的一个项目,1964年投入使用。目前...

什么行业利润大本小(小成本大利润的生意)

什么行业利润大本小(小成本大利润的生意)

做什么生意本小利大?这个问题可能是所有生意人都在考虑的问题,因此,无论线上还是线下,总有一部分人乐此不疲的在寻求偏门赚钱生意,或许在这部分人眼里只有偏门的生意才能做到本小利大吧! 那么,有这样的...

微信怎么快速查找和好友的聊天记录

    我们现在在日常中都离不开手机,手机对我们的影响已经能足...

番石榴怎么吃(番石榴如何吃)

番石榴怎么吃(番石榴如何吃)番石榴是一种美味的水果,其果汁被称为“众神的花蜜”。不要只是被果汁所吸引,整个番石榴都是一种甜蜜的零食,即使坐在小隔间里,也会让您感到自己就像在天堂。通过阅读本文,可以学习...

黑客网址,黑客软件教程下载,邮箱被黑客敲诈 改密码又来了

我依然需求对每个恳求进行一次更新,让它们运用某个变量。 可是在将来,假如我改动了端口,或许假如我切换到了 HTTPS,或许假如我将我的测验 API 布置到一个彻底不同的主机上; 那么我就能够回到调集...

中国驻东盟大使:推进南平市委书记东亚合作需切实践行多边

  中新社雅加达2月1日电 (记者 林永传)中国驻东盟大使邓锡军2月1日在雅加达表示,多边主义是东亚合作取得积极进展的重要法宝。推进东亚合作,各方需切实坚守和践行多边主义。   当天,邓锡军在雅加达...