使用 Koin 时无法通过显式意图启动活动(Koincontext 已启动)

Posted

技术标签:

【中文标题】使用 Koin 时无法通过显式意图启动活动(Koincontext 已启动)【英文标题】:Cannot start activity via explicit intent while using Koin (Koincontext already started) 【发布时间】:2020-12-11 00:00:35 【问题描述】:

我有两个活动:MainActivity 和 LoginActivity。 MainActivity 包含一个带有帐户退出选项的片段,然后打开一个显示 LoginActivity 的意图。

我使用 Koin 作为 DI。我收到此错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo***/***.LoginActivity: java.lang.IllegalStateException: A KoinContext is already started

对于以下代码:

    private fun setListeners()
    btnLogout.setOnClickListener 
        firebaseAuth.getInstance().signOut()
        activity?.finish()
        val intent = Intent(context, LoginActivity::class.java)
        startActivity((intent))
    

我不太确定问题出在哪里。我应该通过 Koin 注入 LoginActivity 吗?意图不应该与 Koin 一起使用吗?

【问题讨论】:

活动启动代码在这种情况下并不重要。附上你初始化 Koin 的地方以及你如何将你的依赖注入到你的活动中。即使是不注入实现的空模块也可以消除问题,并用空实现模拟每个依赖项。我猜?即使使用空模块,您也会遇到崩溃,因为您在应用程序中的一个地方初始化 Koin。 【参考方案1】:

试试这个

private fun setListeners()
    btnLogout.setOnClickListener 
        firebaseAuth.getInstance().signOut()
        activity?.finish()
        val intent = Intent(this, LoginActivity::class.java)
        startActivity((intent))
    

【讨论】:

不幸的是不起作用。它不会将片段识别为“此”目的的上下文 尝试添加this@LoginActivity 并回答是否不应该使用 Kotlin。每当我需要开始一项新活动时,我都会在我的项目中使用意图。

以上是关于使用 Koin 时无法通过显式意图启动活动(Koincontext 已启动)的主要内容,如果未能解决你的问题,请参考以下文章

在活动处于前台时接收明确的意图

KoinAppAlreadyStartedException:一个 Koin 应用程序已经启动

ActivityNotFoundException 意图 + 小部件

另一个活动的Android意图被多次执行

Whatsapp喜欢通过短信实现邀请,只是短信,而不是通过意图选择器

Android5.0隐式启动服务