【问题标题】:Can I exit my android app with code when it is started from a deeplink?从深层链接启动时,我可以使用代码退出我的 android 应用程序吗?
【发布时间】:2019-01-29 05:00:55
【问题描述】:

我正在构建一个应用程序,它使用一些用户可以在其中导航的活动,或者使用一个特定的活动,当使用深度链接时启动应用程序。在此 DeeplinkActivity 中,我有一个按钮,应用程序应通过该按钮退出整个应用程序,而不是将其置于后台。 我尝试了以下代码,它只关闭了应用程序,但它仍然留在后台?!

public void onStopButton(View view) {
    log.info("UI -> Stop this app");
    // this.finishAffinity();
    android.os.Process.killProcess(android.os.Process.myPid());
    // finish();
    System.exit(0);
}

我尝试了各种建议的组合,但没有一个真正退出应用程序。有人有其他(工作)代码建议吗? 我设置了 minSdkVersion=19 和 targetSdkVersion=26

【问题讨论】:

  • “留在后台”究竟是什么意思?您的意思是该任务仍保留在最近的任务列表(也称为概览屏幕)中吗?
  • 我的意思是虽然应用程序从主屏幕上明显消失了,但我仍然可以在后台应用程序列表中看到它,如果我从这个列表中选择它,它将变为活动状态。所以我认为该应用程序并没有真正“被杀死/停止”。我确实记得在 StackOverflow 上的某个地方读到有人说 Android 没有任何手段/机制来真正杀死正在运行的应用程序。如果您寻找“如何通过代码停止应用程序”问题的答案,我会看到很多“解决方案”声称我测试的上述代码部分之一解决了该问题。它绝对不适用于我的设置(目前)。
  • “我仍然可以在后台应用程序列表中看到它”——这个“后台应用程序列表”准确地说是什么?您是指概览屏幕,以前称为最近任务列表吗?如果是这样,那不是后台应用程序列表。它是最近使用的应用程序列表。出现在概览屏幕中并不意味着应用程序有正在运行的进程。
  • 抱歉,我实际上不是 Android(超级)用户!我的意思是我的已关闭应用程序似乎仍然可见(或在背景中)的任务列表,我(和我的首选用户/观众)可能会对此感到困惑。那么我需要寻找一些代码解决方案来清除最近的任务列表吗?

标签: android exit activity-finish deeplink system.exit


【解决方案1】:

首先,请注意有一个像您描述的 is considered to be an anti-pattern in Android 这样的按钮。

话虽如此,如果您的 minSdkVersion 为 21 或更高,请将您的 onStopButton() 替换为:

public void onStopButton(View view) {
  finishAndRemoveTask();
}

如果你的minSdkVersion低于21,我不推荐there are some clunky workarounds

【讨论】:

  • 我知道反模式,并且由于客户确实希望在我的应用程序中使用此功能,因此我需要以某种方式实现它。目前我找到了一个解决方案,将清单中的 android:excludeFromRecents="true" 添加到 DeepLinkActivity。这至少可以防止应用程序出现在最近任务列表中,前提是该应用程序尚未手动启动。但是,当应用程序已手动启动并通过深度链接激活操作时,不会发生此行为。它仍然显示在此用例的最近任务列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2014-11-01
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多