我观察到如果我通过Google Play的“立即打开”按钮打开手机中安装的某些应用程序,应用程序将正常打开,如果我导航到应用程序内的其他活动,然后按回家,然后转到手机的启动器,通过那里打开应用程序。它会启动一项新任务 - 我相信 - 因为App的启动器活动已经重新浮出水面。如果我按回,我将进入第二个活动 - 这是我从Google Play推出应用程序时前景中的最后一个活动。有办法避免这种情况吗?我期待在这种情况下看到第二个活动。无论我的应用程序是从Launcher还是Google Play商店启动,我都希望拥有相同的任务。
我发现Playstore中的很多应用都有这种行为。一个很好的例子是Zomato应用,我的应用是Shake Eat Off
我一直在Manifest中试验android:launchMode
而没有运气。
我尝试将singleTask
设置为根活动,将`singleTop设置为第二个活动
我还尝试将android:alwaysRetainTaskState="true"
添加到根Activity。
我还尝试将singleTask
设置为根活动,将singleInstance
设置为第二个活动
所以要解释更多链:
Google Play应用页面 - >立即打开 - >根活动 - >第二个活动(现在是前景)。 按主页,单击App Icon。 此时,root活动现在再次显示(但我希望看到第二个Activity,因为它是前景中的最后一个活动)。 按下 - > 第二项活动将重新出现。
答案 0 :(得分:0)
发生这种情况是因为启动器意图再次被启动。 我看到有人在讨论社区中发布了一个简短的解决方案。我想出了一个完整的解决方案和原始解决方案。 在初始屏幕中,将这些代码放在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()函数不会立即杀死新的Splash屏幕,而OS需要花费一些时间才能杀死它。