从 Playstore 与 Launcher 行为的 Android 打开应用程序

标签 android

我观察到,如果我通过 Google Play 的“立即打开”按钮打开手机中安装的一些应用程序,应用程序将正常打开,如果我导航到应用程序内的另一个 Activity,然后按主页,然后转到手机的启动器,打开应用程序通过那里。它将开始一项新任务——我相信——因为应用程序的启动器 Activity 已经重新出现。如果我回击,我将进入第二个 Activity - 这是我从 Google Play 启动应用程序时前台的最后一个 Activity。有没有办法避免这种情况?我期待在这种情况下看到第二个 Activity 。无论我的应用是从 Launcher 还是 Google Play 商店启动,我都希望执行相同的任务。

我发现 Playstore 中的很多应用程序都有这种行为。一个很好的例子是 Zomato应用程序和引用我的应用程序是Shake Eat Off

我一直在尝试 android:launchMode在 list 中没有运气。

我尝试设置 singleTask到根 Activity 和`singleTop 到第二个 Activity

我还尝试添加 android:alwaysRetainTaskState="true"到根 Activity 。

我也试过设置singleTask到根 Activity 和 singleInstance到第二个 Activity

所以要解释更多的链条:

Google Play 应用页面 -> 立即打开 -> 根 Activity -> 第二个 Activity (现在前台)。
按主页,单击应用程序图标。
此时,根 Activity 现在再次显示(但我希望看到第二个 Activity,因为它是前台的最后一个 Activity)。
按回 ->
第二个 Activity 将重新出现。

最佳答案

发生这种情况是因为启动器 Intent 再次启动。
我看到有人在讨论社区中发布了一个简短的解决方案。我用原始解决方案提出了一个完整的解决方案。
在您的启动画面中,您将这些代码放在 onCreate()

if (!isTaskRoot()) {
    finish();
} else {
    // Place your current onCreate() codes
    // We put code here because finish() doesn't kill the activity immediately while OS takes a while to kill it and we don't need codes to be execute
}
这些代码可帮助您不跳过新任务并调出所有旧创建的任务
如果 onResume() 中有一些代码,在您的初始屏幕中
将它们置于以下条件
if (isTaskRoot()) {
    // Place your current onResume() codes
}
这有助于您的 onResume() 代码仅在旧根任务的任务时执行。使用它是因为 onCreate() 中的 finish() 函数不会立即杀死新的启动画面,而操作系统需要一段时间才能杀死它。

关于从 Playstore 与 Launcher 行为的 Android 打开应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44279446/

相关文章:

android - Kotlin,使用相同的方法实现两个接口(interface)并具有默认值

android - 如何为 Android 兼容包安装 javadoc?

java - OpenCV 应用程序 - Android 相机一直显示黑屏

android - onStop() 没有被调用?

android - 插件冲突错误 : Admob and Fiebase Plugin

java - 如何进行 "swipe information" Activity ?

android - 如何使 ListView (已创建)可点击(Android)?

java - 是否建议使用 ProgressDialog 进行登录?

android签名工具PEPK lnk下载

android - 如何删除firebase android中的子节点?