来自Playstore vs Launcher行为的Android开放应用

时间:2017-05-31 08:25:15

标签: android

我观察到如果我通过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,因为它是前景中的最后一个活动)。 按下 - > 第二项活动将重新出现。

1 个答案:

答案 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需要花费一些时间才能杀死它。