Jetpack的内部设计:为什么在Canvas上绘制,而不是重复使用本机Views?

时间:2019-11-25 16:11:37

标签: android ios android-jetpack android-jetpack-compose

此问题基于:How does jetpack compose work under the hood

Jetpack Compose基于AndroidComposeView,它继承自ViewGroup,并且是Compose自己的小部件树的根。这样,整个树可以集成到现有视图中,但是单个节点不是Android视图。 Android视图和Compose UI窗口小部件之间的过渡非常清晰:为Compose重新实现了一些关键类(例如Canvas),而Compose的UI小部件(当前)在布局检查器中不可见。

Jetpack Compose将其小部件呈现到画布上,并使用一些巧妙的技巧来应用状态更改。据我了解,这与现有的布局引擎完全正交,因此您不应在本机视图和组合小部件之间来回切换。 This would be a stark contrast to SwiftUI

  

SwiftUI与所有Apple上的现有UI框架无缝协作   平台。例如,您可以放置​​UIKit视图和视图控制器   在SwiftUI视图中,反之亦然。

我对iOS方面几乎一无所知。也许UIkit更适合与SwiftUI交互。但是,如果不是这种情况,并且Jetpack Compose与本机小部件的分离并非受内部约束的约束,那似乎是一个奇怪的设计决定。

现在,我的问题是:为什么Jetpack Compose基于其自己的渲染路径(基于自定义Canvas实现),而不是以某种方式重用本机视图?这是否具有隐藏的优势,或者根本不可能将现有视图弯曲为反应性编程模式?在我看来,从长远来看,这似乎将促进潜在的多平台工作,但在短期内会导致更多的应用程序开发分散。

1 个答案:

答案 0 :(得分:0)

我相信选择呈现自己的UI的原因之一是因为Compose旨在成为多平台并且类似于Flutter,我们也许能够使用Compose编写iOS支持的UI