从setContent开始:

  • 在Compose中,一个Activity创建好以后,以往的setContentView()被setContent{}取代了。
  • 可以这么说,Compose的Coding环境,其实是从setContent{}开始的。

setContent做了什么:

  • setContent{}是ComponentActivity的一个kotlin扩展函数(具体扩展函数可以看下:扩展 - Kotlin 语言中文站)。ComponentActivity是FragmentActivity的父类,所以算是比较顶层的Activity了。我们常用到的Lifecycle,也来自ComponentActivity。基于kotlin的扩展好处,当然就是在无代码侵入的情况下,就能够为ComponentActivity扩展一个名为setContent{}的函数
  • 当然之所以选择ComponentActivity,也很正常,Compose也需要使用到Lifecycle相关。
  • setContent{}的简单原理,其实就是通过findViewById,找到android.R.id.content也就是DecorView的根布局,将根布局的first child取出。如果取到的first child是ComposeView,表示Content已经设置成功。如果是null或者其他View,则实例化一个ComposeView,作为Activity的ContentView。

 评论