如何在 Kotlin 中关闭 Android 应用程序
Posted
技术标签:
【中文标题】如何在 Kotlin 中关闭 Android 应用程序【英文标题】:How to close Android application in Kotlin 【发布时间】:2018-08-13 23:24:43 【问题描述】:在 JAVA 中我们可以关闭应用程序。我们尝试使用 Kotlin 开发技能,并感觉我们正在使用正确的语法来关闭应用程序。问题是代码只有在您在进入第二页并返回 MainActivity 之前关闭应用程序时才有效,MainActivity 是下面的启动器活动代码
fun onTV(view: View)
exitProcess()
private fun exitProcess()
//finish()
System.exit(-1)
finish 和 System.exit(-1) 都可以在没有导航的情况下先选择 到 PageTwoActivity
onTV 是 TextView 的 onClick 属性 我的猜测是我们需要清除堆栈购买设置标志所以问题是 Kotlin 中这个的语法是什么?请记住,我们在启动器页面上 主要活动。我们需要结果的意图吗?
好的,我尝试了这段代码,没有任何改进
val intent = Intent(context, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOIntent.FLAG_ACTIVITY_NEW_TASK
finish()
我们已经接近了现在的代码,但问题仍然是,如果您不导航到 PageTwo 并单击按钮以在应用程序启动后立即关闭应用程序,这将关闭应用程序
fun onTV(view: View)
onBYE()
fun onBYE()
exitProcess(-1)
所以我想问题是如何在执行 onBYE 时从堆栈中清除 PageTwo ?
【问题讨论】:
是的,startActivityForResult 和 setResult 带有一些 EXIT_CODE,然后去听它并向后传播(带有更多的 setResuts) @MarcosVasconcelos 因为我搜索并找不到示例代码,您能否发布一小段代码,正是这一行让我感到困惑 val intent = Intent(this@MainActivity, PageTwoActivity::class.java ) 声明意图是我们迷路的地方 @MarcosVasconcelos 我添加并编辑了我的任务,以显示我用来在 Kotlin 中构建和 Intent 的代码结构没有结果 【参考方案1】:Grendel 是最简单的两种关闭 Kotlin 应用程序的方法 第一种方法将在重新加载时在 PageTwo 上打开应用程序 不优雅,但我包括有人有启动画面的机会
moveTaskToBack(true);
exitProcess(-1)
第二种方法太简单太老了,你会尖叫 它将关闭 Kotlin 应用程序,并在重新加载时首先显示 MainActivity
finishAffinity()
我使用 Nexus 9 API 26 对此进行了测试我没有三星 Galaxy S2 但请随时给我寄一份哈哈
【讨论】:
【参考方案2】:对此有两种解决方案,适用于您的代码:
val intent = Intent(context, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOIntent.FLAG_ACTIVITY_NEW_TASK
intent.putBooleanExtra(MainActivity.FINISH, true)
finish()
将 FINISH 声明为 val FINISH = "finish_key_extra"
并在 MainActivity 的 onCreate 处添加此代码
super.onCreate(state)
boolean finish = getIntent().getBooleanExtra(FINISH, false) //default false if not set by argument
if(finish)
finish();
return;
由于您使用 CLEAR_TOP 和 NEW_TASK,您将只有一个活动在堆栈上,因此您通过发送参数来完成它。
我提到的另一个解决方案是使用 startActivityForResult(intent, REQUEST_CODE_X)
启动应用程序上的每个 Activity
并且在应用程序的每个活动上也有这个代码:(声明一个 int FINISH_APP 用作某处的结果代码)
void onActivityResult(int requestCode, int resultCode, Bundle result)
if(requestCode == AppIntents.REQUEST_CODE_X)
if(resultCode == FINISH_APP)
setResult(FINISH_APP);
finish();
并且在任何时候你想开始关闭你调用的应用程序:
setResult(FINISH_APP);
finish();
请注意,FINISH_APP 的声明与 RESULT_OK、RESULT_CANCELED 不同,因此您的应用仍然可以使用它。
注意:我是 Java 开发人员,而不是 kotlin
【讨论】:
感谢您的建议,它们看起来很棒,尝试过很抱歉,当我将代码粘贴到简单项目中时,我们都处于“非 Kotlin”开发者的困境中,请参阅对 mducc 的评论以进行设计应用程序的如果你可以用 Java 编写,我们总是可以转换 仍然在寻找代码来关闭应用程序它应该不难,但如果不是那么乐趣在哪里 其实是这样,你只需要翻译这个 @MarcosVasconcelow 我做了翻译,还有很多 RED 我确实添加了变量,但如果我得到结果,没有运气会让你知道 这里的想法是删除堆栈并完成唯一持续的,您可以简单地创建一个新的 FinishActivity 并使用 CLEAR_TOP | 调用它。 NEW_TASK 并且您在 onCreate 上做的唯一一件事就是完成()【参考方案3】:这行得通:
android.os.Process.killProcess(android.os.Process.myPid())
...但是在这个 SO 问题中引起了激烈讨论的重要警告,Why is calling Process.killProcess(Process.myPid()) a bad idea?
【讨论】:
以上是关于如何在 Kotlin 中关闭 Android 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在移动 android/iOs(本机应用程序)中关闭 webview
即使应用程序在android中关闭,如何在服务应该工作时添加位置权限?
即使用户在android studio中关闭应用程序,如何保持登录状态