我观察到,如果我通过Google Play的“立即打开”按钮打开手机中安装的某些应用程序,则该应用程序将正常打开;如果我导航到该应用程序中的另一个“活动”,然后按首页,然后转到手机的启动器,打开该应用程序通过那里。我相信,它将启动一项新任务,因为该应用的启动器活动已经浮出水面。如果我按回去,那么我将进入第二个活动-这是我从Google Play启动应用程序时前台中的最后一个活动。有办法避免这种情况吗?我希望看到这种情况下的第二项活动。无论我的应用是从启动器启动还是从Google Play商店启动,我都希望执行相同的任务。
我发现Playstore中的许多应用都有此行为。Zomato应用程序就是一个很好的例子,我的应用程序是Shake Eat Off,供参考,
我一直在尝试android:launchMode在清单上运气不好。
我尝试将其设置singleTask为根活动,将“ singleTop”设置为第二个活动
我也尝试添加android:alwaysRetainTaskState="true"到根活动。
我也尝试设置singleTask为根活动和singleInstance第二个活动
因此,要进一步解释链条:
Google Play应用页面->立即打开->根活动->第二个活动(现在为前台)。按主页,单击“应用程序图标”。此时,根活动现在再次显示(但是我希望看到第二个活动,因为它是前台的最后一个活动)。按返回->第二个活动将重新出现。
发生这种情况是因为启动器意图再次启动。我看到有人在讨论社区中发布了一个简短的解决方案。我用原来的解决方案想出了一个完整的解决方案。在您的启动屏幕中,您将这些代码放在 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
}
Run Code Online (Sandbox Code Playgroud)
这些代码可以帮助您不跳过新任务并调出所有旧创建的任务
在您的启动屏幕中,如果 onResume() 中有一些代码,请将它们置于以下条件中
if (isTaskRoot()) {
// Place your current onResume() codes
}
Run Code Online (Sandbox Code Playgroud)
这有助于您的 onResume() 代码仅在任务是旧的根任务时才执行。使用此选项是因为 onCreate() 中的 finish() 函数不会立即终止新的启动屏幕,而操作系统需要一段时间才能终止它。
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |