我观察到,如果我通过 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/