为何Android Compose会向未使用Fragment的Composable注入Fragment实例?
原因分析
- 隐式注入外部类实例:你在
ApiManagementFragment类内部定义的MessageView、CreateApiButton、GotoDocument这三个Composable,属于Fragment的成员函数。Compose编译器会自动把包含这些Composable的外部类实例(也就是ApiManagementFragment对象)作为隐式参数传递给它们,哪怕你没有在函数参数列表里显式声明这个依赖。 - Fragment属于不稳定类型:
ApiManagementFragment作为Fragment的子类,是Compose认定的不稳定类型——这类类型的equals和hashCode方法并非基于不可变状态实现,Compose无法可靠地判断实例是否发生了实际变化。 - 不稳定参数阻断skippable标记:Compose将一个Composable标记为skippable的核心前提是,它的所有入参都是稳定类型。因为
MessageView被注入了不稳定的ApiManagementFragment实例作为参数,编译器无法保证该参数不会无意义地变更,因此不会为它打上skippable标记。
内容的提问来源于stack exchange,提问作者Mneckoee
相关产品推荐
相关产品推荐

