首页 > 解决方案 > IllegalStateException:系统服务在 onCreate() 之前对活动不可用当我尝试在 Hilt 中提供活动时

问题描述

主要活动

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

private lateinit var binding : ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

}

刀柄模块

@Module
@InstallIn(SingletonComponent::class)
class AppModule {

@Singleton
@Provides
fun provideActivity(): MainActivity = MainActivity()

@Singleton
@Provides
fun provideActivityUtils(@ActivityRetainedScoped context: MainActivity): ActivityUtils = 
ActivityUtilsImpl(context)
}

以及具有所需功能的 utils 类

class ActivityUtilsImpl @Inject constructor(@ActivityRetainedScoped private val activity: 
MainActivity) : ActivityUtils {

override fun showKeyboard() {
    val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as 
InputMethodManager?
    imm?.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0)
 }
}

当我尝试使用活动实例从 utils 类调用某些内容时,我收到错误 java.lang.IllegalStateException: System services not available to Activities before onCreate ()

试过@ActivityContext同样的事情,我怎样才能让它正常调用

标签: androidkotlindagger-hilt

解决方案


   @Singleton
   @Provides
   fun provideActivity(): MainActivity = MainActivity()

从来没有手动实例化过一个活动。

应该

 @InstallIn(ActivityComponent::class)
 @Module
 class ActivityModule {
     @Provides @ActivityScope fun activityUtils(activity: Activity): ActivityUtils = ActivityUtilsImpl(activity) 

推荐阅读