登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 857|回复: 0

Kotlin插件的落幕,ViewBinding的崛起|开辟者说·DTalk

[复制链接]

952

主题

952

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2020-12-24 03:21:20 | 显示全部楼层 |阅读模式 来自 香港
您未得到众大云收罗的授权,部门功能受到影响!


尊重的用户:

  您好!非常感谢您能安装和关注智伍应用旗下的产物,为了产物的可连续发展和升级,众大云收罗已经开始收费。

  向用户收费是为了给用户更可靠的保障和服务,所收取的费用重要用于产物的正常运作、研发和改进,盼望各位可以或许明白和支持。

  别的,为了报答新老客户,众大云收罗5折优惠,原价980元,如今购买仅需490元,给您节流了490元。

  客服QQ:2891276344,微信:ccccyyyy4444

  购买正式版永世授权请打开下面的网址:

http://www.zhiwu55.com/authorization/csdn123_news.php?hzw_appid=6A43D6F53C406FB5EAEBC6155B3E2911

  购买正式版授权之后全部的未授权提示将主动消散,图片也正常表现,正式版授权永世有用终身可用,后续的升级更新也是免费的,一次购买一辈子都能用,无后顾之忧!


提示:为了您网站的内容安全,请不要发布违背国家法律法规的内容,您现在利用的是免费试用版,可以手动删除上面的未购买授权的提示,发布这篇文章!


原标题:Kotlin 插件的落幕,ViewBinding 的崛起 | 开辟者说·DTalk

本文原作者: hi-dhl,原文发布于: ByteCode

http://mp.weixin.qq.com/s/FxrRyXp9-VDdv-mfkzsIsA

近来小伙们应该都会收到 Kotlin 1.4.20的升级关照,在 Kotlin 1.4.20中做了一个紧张的更新 如下图所示:

Q2cR622wJ7WY2P6y.jpg

简朴总结一下,重要有以下几点:

  • 废弃了 kotlin-android-extensions 编译插件
  • Parcelable 相干的功能,移到了新的插件 kotlin-parcelize

按照 Google 的表明,kotlin-android-extensions插件只会保存至少一年的时间,将会在 2021 年 9 月或之后的 Kotlin 版本中移除

按照 Google 的表明,kotlin-android-extensions插件只会保存至少一年的时间,将会在 2021 年 9 月或之后的 Kotlin 版本中移除

kotlin-android-extensions重要有以下两个功能:

  • 利用 Kotlin 合成方法 (Synthetic 视图) 代替 findViewById,通过引入 kotlinx.android.synthetic可以直接利用控件的 ID,我猜当初也是由于这个特性,吸引了许多开辟者开始学习和实验利用 Kotlin

  • 手动实现 Parcelize比力贫苦,以是 Kotlin 提供了 @Parcelize注解资助快速实现 Parcelize

利用 Kotlin 合成方法 (Synthetic 视图) 代替 findViewById,通过引入 kotlinx.android.synthetic可以直接利用控件的 ID,我猜当初也是由于这个特性,吸引了许多开辟者开始学习和实验利用 Kotlin

手动实现 Parcelize比力贫苦,以是 Kotlin 提供了 @Parcelize注解资助快速实现 Parcelize

睁开全文

实在这并不是什么新的消息了,早在 2019 年的时间,Google 就提出了不发起在项目中利用 kotlinx.android.synthetic,详见这个 commit ,部门内容如下图所示:

yIp33W11gg53Llik.jpg

通过引入 kotlinx.android.synthetic可以直接利用控件的 ID,这么方便为什么不发起利用?重要有以下题目:

  • 通过 Kotlin 合成方法 (Synthetic 视图) 代替 findViewById ,这是通过全局空间缓存 ID,与 Layout 无关,没有针对 ID 举行无效查抄
  • 在差别的 Layout 文件中,利用了雷同的 ID,大概删除了 ID ,它并不会提示空非常,导致增长了 App 的瓦解次数
  • 仅仅支持 Kotlin
  • 默认是通过 HashMap 缓存 ID 浪费空间,固然可以通过在模块级 build.gradle 文件内添加 defaultCacheImplementation = "SPARSE_ARRAY" 来修改默认的实现方式为 SparseArray
  • ......

因此 ViewBinding 出现了,ViewBinding 办理了上述全部题目,ViewBinding 固然好,但是也有它的不敷之处。

  • ViewBinding 相比于 kotlinx.android.synthetic利用方式比力复杂

  • ActivityFragmentDialogAdapter中 ViewBinding 和 DataBinding 初始化方式有些差别

  • 必要单独处置惩罚 includemerge标签的结构,和不带 merge标签的结构等等

  • DataBinding 联合 LiveData 一起利用必要做单独的处置惩罚

  • ......

ViewBinding 相比于 kotlinx.android.synthetic利用方式比力复杂

ActivityFragmentDialogAdapter中 ViewBinding 和 DataBinding 初始化方式有些差别

必要单独处置惩罚 includemerge标签的结构,和不带 merge标签的结构等等

DataBinding 联合 LiveData 一起利用必要做单独的处置惩罚

......

无论 ViewBinding 和 DataBinding 它们的利用方式都比力复杂,稍后我会先容一种方法,只必要一行代码即可利用 ViewBinding (视图绑定) 和 DataBinding (数据绑定),那么 ViewBinding 和 DataBinding 有什么区别呢?

ViewBinding 和 DataBinding

ViewBinding:

  • 仅仅支持绑定 View

  • 不必要在结构文件中添加 layout 标签

  • 必要在模块级 build.gradle文件中添加 viewBinding = true即可利用

  • 服从高于 DataBinding,由于制止了与数据绑定相干的开销和性能题目

  • 相比于 kotlin-android-extensions插件制止了空非常

仅仅支持绑定 View

不必要在结构文件中添加 layout 标签

必要在模块级 build.gradle文件中添加 viewBinding = true即可利用

服从高于 DataBinding,由于制止了与数据绑定相干的开销和性能题目

相比于 kotlin-android-extensions插件制止了空非常

DataBinding:

  • 包罗了 ViewBinding 全部的功能
  • 必要在模块级 build.gradle 文件内添加 dataBinding = true 而且必要在结构文件中添加 layout 标签才可以利用
  • 支持 data 和 view 双向绑定
  • 服从低于 ViewBinding,由于解释处置惩罚器会影响数据绑定的构建时间。

ViewBinding 可以实现的,DataBinding 都可以实现,但是 DataBinding 的性能低于 ViewBinding,DataBinding 和 ViewBinding 会为每个 XML 文件天生绑定类。

Android Studio 3.6版本开始,就内置在 Gradle 插件中了,不必要添加任何额外的库来利用它们,但是在 Android Studio 3.6Android Studio 4.0中利用方式不一样。

//Android Studio 4.0android{buildFeatures{dataBinding= trueviewBinding= true}}

接下来我们看一下如安在项目中利用 DataBinding 和 ViewBinding,因文章篇幅缘故原由,这里仅仅演示在 Activity 中利用,更多用法可以检察 Binding 库中的示例。Binding 地点: http://github.com/hi-dhl/Binding

zzMZ3qYvGoBYP8Eg.jpg

在模块级 build.gradle文件内开启 DataBinding 大概 ViewBinding 之后,必要在 Activity 中举行初始化,获取到 ViewBinding 实例即可利用。

overridefunonCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

// Viewbindingvalbinding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)

// DataBinding// val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

with(binding){textView.setText( "Binding") }}}

假如在每个 Activity 中都必要添加 ActivityMainBinding.inflate大概 DataBindingUtil.setContentView方法来举行初始化,如许无疑增长了许多模板代码,不但仅是 Activity 在 Fragment、Dialog、Adapter 中都必要添加对应的方法来初始化。

那么能不能用一种方法,可以同一这些初始化方案,在 Kotlin 中是可以实现的,仅仅必要一行代码即可实现 DataBinding 和 ViewBinding。

一行代码实现 DataBinding 和 ViewBinding

假如在每个 ActivityFragmentDialogAdapter中都必要手动来添加雷同的方法来初始化,如许的本钱黑白常大的,以是我们联合 Kotlin 委托属性,通过反射 inflate方法获取到 ViewBinding 实例,如许就可以直接利用 ID 了。

因此 Binding 库出现了,只必要一行代码即可实现 DataBinding 和 ViewBinding,这个库最初的思绪源于 Simple one-liner ViewBinding in Fragments and Activities with Kotlin ,我们来看一下如安在项目中利用 Binding 库。

  • 将下列代码添加在模块级 build.gradle 文件内,而且必要开启 DataBinding 大概 ViewBinding
  • 在 Dialog 中利用方式如下所示

添加具有生命周期感知的 Dialog

  • 在 Activity 、 AppCompatActivity 、 FragmentActivity 中利用,继续对应的类添加 by viewbind 即可如下所示。

Fragment中利用方式如下所示。

Binding 库具有以下长处:

  • 可以在 Activity 、 AppCompatActivity 、 FragmentActivity 、 Fragment 、 Dialog 中的利用 DataBinding 大概 ViewBinding
  • 制止模板代码,只必要一行代码即可实现 DataBinding 大概 ViewBinding
  • 具有生命周期感知,当生命周期处于 onDestroyed 时会主动烧毁数据

源码分析,将会在后续的文章中分享

怎样迁徙 Parcelable

Kotlin 将 Parcelable相干的功能,移到了新的插件 kotlin-parcelize,迁徙只必要两步,如下所示。

  • 在模块级 build.gradle文件中,将 kotlin-android-extensions修改为 kotlin-parcelize

在模块级 build.gradle文件中,将 kotlin-android-extensions修改为 kotlin-parcelize

  • 将 import kotlinx.android.parcel.Parcelize 修改为 import kotlinx.parcelize.Parcelize 但是这一步不是必须的, kotlinx.android.parcel.Parcelize 可以继承利用,到现在为止还没有发现什么题目 (PS: 假如出现,只必要将包名更换就好)

结语

文章中相干的示例,已经上传到 GitHub 接待前往堆栈 Binding检察。Binding 地点: http://github.com/hi-dhl/Binding

感谢 Simple one-liner ViewBinding in Fragments and Activities with Kotlin文章带来的思绪,以及从 Anko、和 ViewBindingDelegate等等开源库中学习到本领。

检察更多开辟者出色分享

"开辟者说·DTalk" 面向中国开辟者们征集 Google 移动应用 (apps & games) 相干的产物/技能内容。接待各人前来分享您对移动应用的行业洞察或看法、移动开辟过程中的心得或新发现、以及应用出海的实战履历总结和相干产物的利用反馈等。我们由衷地盼望可以给这些出众的中国开辟者们提供更好显现本身、充实发挥本身专长的平台。我们将通过各人的技能内容偏重选出良好案例举行谷歌开辟技能专家 (GDE) 的保举。 返回搜狐,检察更多

责任编辑:





上一篇:首届“指挥官杯”能源互联网安全技能大赛收官
下一篇:数字孪生都会应用【案例集】,附下载
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-9 04:20 , Processed in 0.187467 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表