-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
-
Android组件创建方式的区别
- Fragment:由 FragmentManager 管理创建
- Service:由 Android 系统通过反射创建
-
Hilt/Dagger 依赖注入原理
- 使用
@Inject constructor时会生成工厂类 - 需要通过这些工厂类来创建对象实例
- 使用
-
核心区别
- Fragment:Hilt 可以接管创建过程
- Service:系统必须通过无参构造函数反射创建
-
Service 创建流程
// Android 系统创建 Service 的简化代码 Class<?> serviceClass = Class.forName(serviceName); Service service = (Service) serviceClass.newInstance(); // 必须有无参构造函数
-
Fragment 创建流程
// Hilt 接管 Fragment 创建的简化示意 class HiltFragment : Fragment { @Inject constructor(dependency: SomeDependency) companion object { fun newInstance(): HiltFragment { return HiltFragmentFactory.create() // Hilt 工厂创建 } } }
-
正确的 Service 依赖注入方式
@AndroidEntryPoint class MyService : Service() { @Inject lateinit var dependency: SomeDependency // 属性注入 // 默认无参构造函数 }
-
总结
Android 系统对 Service 的创建有特殊要求,必须保留无参构造函数,而 Fragment 的创建则可以被 Hilt 完全接管。