【问题标题】:IllegalStateException: System services not available to Activities before onCreate() When I tried to provide activity in HiltIllegalStateException:系统服务在 onCreate() 之前对活动不可用当我尝试在 Hilt 中提供活动时
【发布时间】:2021-02-20 00:54:02
【问题描述】:

主要活动

@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同样的东西,怎么才能让它正常调用

【问题讨论】:

    标签: android kotlin dagger-hilt


    【解决方案1】:
       @Singleton
       @Provides
       fun provideActivity(): MainActivity = MainActivity()
    

    永远不会手动实例化 Activity。

    应该是

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

    【讨论】:

    • 是的,谢谢。我试过这样,但在一个模块中,并且有一个错误“不同的范围”。为什么手动实例化 Activity 不好?
    • 主要是因为它不起作用。系统会创建它们。
    猜你喜欢
    • 2012-12-05
    • 2013-08-29
    • 1970-01-01
    • 2011-08-19
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多