【问题标题】:How do I exit a Kotlin app from Non-Main Activity如何从非主活动中退出 Kotlin 应用程序
【发布时间】:2019-12-14 06:14:07
【问题描述】:

我有一个具有以下结构的应用程序:

我有一个启动器 Activity -> MainActivity.kt,它在其 onCreate 中调用 SplashScreen.kt

在这个SplashScreen.kt,我从我的服务器下载数据,然后最后打开Dashboard.kt

Dashboard.kt,每当我按回两次,我就想退出应用程序。

这就是我设置退出功能的方式

private fun quit(){
        if (lastBackPressed + 2000 > System.currentTimeMillis()){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                this.finishAffinity()
            } else{
                this.finish()
                exitProcess(0)
            }
        }
        else Toast.makeText(
            context,
            "Press once again to exit!",
            Toast.LENGTH_SHORT
        ).show()
        lastBackPressed = System.currentTimeMillis()
    }

为此,我参考了以下问题:

但是,那里的所有解决方案只能帮助我退出我的Dashboard.kt

Dashboard.kt 退出后,MainActivity 会立即重新启动并加载 SplashScreen.kt,然后再加载 Dashboard.kt(再次)。

有没有更好更有效的方式直接从Dashboard.kt 活动退出应用?

【问题讨论】:

  • 您是否在开始新的活动之前完成了之前的活动?
  • 不。谢谢。这是一个愚蠢的错误>///
  • 我喜欢你只在 SplashActivity 中下载数据的方式......因为不能保证在应用程序执行期间运行。
  • @EpicPandaForce 有趣!你能详细解释一下吗?我实际上是在 Splash 中从我的服务器下载 jsonData。此数据进一步用于创建仪表板元素。不保证运行怎么办?
  • @SowingFiber 因为如果您从后台返回,Android 可以跳过您的启动画面。见stackoverflow.com/questions/49046773/…

标签: android kotlin exit


【解决方案1】:

在应用的清单文件中,在主活动中添加android:noHistory="true" 标志。这将允许您的应用打开 MainActivity,然后在调用另一个 Activity 时将其从堆栈中删除。

例如你的情况:

MainActivity.kt

->SplashScreen.kt

-> Dashboard.ktMainActivity.kt 保留在堆栈中。)

如果您在主活动中添加android:noHistory="true" 标志,那么会发生如下情况:

MainActivity.kt

-> SplashScreen.ktMainActivity.kt 将从堆栈中删除。)

->Dashboard.kt

-> 在此处按两次后即可退出应用。

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多