IllegalStateException:当我尝试在 Hilt 中提供 activity 时,onCreate() 之前的活动无法使用系统服务
IllegalStateException: System services not available to Activities before onCreate() When I tried to provide activity in Hilt
主要Activity
@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)
}
以及具有所需功能的实用程序 class
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)
}
}
当我尝试使用 activity 实例从实用程序 class 调用某些内容时,出现错误 java.lang.IllegalStateException:系统服务在 onCreate ()[= 之前对 Activity 不可用14=]
试过@Activity上下文是一样的,怎么才能让它正常调用
@Singleton
@Provides
fun provideActivity(): MainActivity = MainActivity()
永远不要手动实例化 Activity。
应该是
@InstallIn(ActivityComponent::class)
@Module
class ActivityModule {
@Provides @ActivityScope fun activityUtils(activity: Activity): ActivityUtils = ActivityUtilsImpl(activity)
主要Activity
@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)
}
以及具有所需功能的实用程序 class
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)
}
}
当我尝试使用 activity 实例从实用程序 class 调用某些内容时,出现错误 java.lang.IllegalStateException:系统服务在 onCreate ()[= 之前对 Activity 不可用14=]
试过@Activity上下文是一样的,怎么才能让它正常调用
@Singleton @Provides fun provideActivity(): MainActivity = MainActivity()
永远不要手动实例化 Activity。
应该是
@InstallIn(ActivityComponent::class)
@Module
class ActivityModule {
@Provides @ActivityScope fun activityUtils(activity: Activity): ActivityUtils = ActivityUtilsImpl(activity)