此问题基于: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实现),而不是以某种方式重用本机视图?这是否具有隐藏的优势,或者根本不可能将现有视图弯曲为反应性编程模式?在我看来,从长远来看,这似乎将促进潜在的多平台工作,但在短期内会导致更多的应用程序开发分散。
答案 0 :(得分:0)
我相信选择呈现自己的UI的原因之一是因为Compose旨在成为多平台并且类似于Flutter,我们也许能够使用Compose编写iOS支持的UI