从深层链接启动时,我可以使用代码退出我的 android 应用程序吗?

Posted

技术标签:

【中文标题】从深层链接启动时,我可以使用代码退出我的 android 应用程序吗?【英文标题】:Can I exit my android app with code when it is started from a deeplink? 【发布时间】: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

【问题讨论】:

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

以上是关于从深层链接启动时,我可以使用代码退出我的 android 应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在应用程序已经运行时使用分支深层链接?

每次启动应用程序时,Branch.io Deeplink 都会打开深层链接

如何区分 Firebase 动态链接的启动和安装?

从后台打开 React Native 深层链接应用程序

从深层链接的开头删除 /#/?

应用程序从深层链接启动,然后从启动器再次激活重新启动活动