当点击应用程序图标时,android回到上次打开的活动

时间:2016-07-19 05:14:27

标签: android

从app图标启动时,我一直在寻找回到上次打开活动的一些建议。但仍有一些副作用要处理。

LauncherActivity是监听

的条目活动
<activity
            android:name="com.app.ui.LauncherActivity"
            android:configChanges="orientation|keyboardHidden"
            android:launchMode="singleTask"
            android:screenOrientation="nosensor">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

然后还有另外一项活动和第三项活动。

我的方案如下:

1. LauncherActivity -> SecondActivity 
2. SecondActivity -> ThirdActivity (When launching ThirdAcitivity, SecondActivity will finish itself)

因此,当在ThirdActivity时,用户单击主页键。 如果应用程序是从recentTask打开的,那么将显示最后打开的ThirdActivity。这就是我想要的行为。

但是当从应用程序图标快捷方式打开应用程序时,它会转到LauncherActivity。但我希望它与recentTask的行为相同。如果最后打开的ThirdActivity没有被销毁,那么它应该显示这个而不是LauncherActivity。

但是如果app force停止然后重启或者ThirdActivity被销毁,则无需返回到ThirdActivity。回到LauncherActivity是好的。

我一直在寻找解决方案。将上次活动保存到sharedPreference的建议对我的情况不利。

我想知道如何从最近的任务中实现启动。是否有人可以指导我。非常感谢。

3 个答案:

答案 0 :(得分:3)

启动器活动onCreate()方法中,写下:

if (!isTaskRoot()
            && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
            && getIntent().getAction() != null
            && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

        finish();
        return;
}
当活动堆栈中没有活动时,

isTaskRoot()为true。在您的情况下,如果活动堆栈中有另一个活动(您的情况下为第三个活动),则上面的代码将完成启动活动并将第三个活动带到屏幕。

答案 1 :(得分:0)

您可以通过在一个活动中包含三个片段来处理此问题。我们将该活动作为您的LaunchActivity,然后它具有LAUNCHER intent-filter,并在您单击应用程序图标时始终打开。如果您在该活动中有三个片段,那么最后一个片段就会打开,就像您从最近的任务中打开应用程序一样。

答案 2 :(得分:0)

您也可以删除launchMode="singleTask"。大多数应用程序都不需要它。