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

rod*_*_la 3 android

当从应用程序图标启动时,我正在寻找一些关于返回到上次打开的活动的建议。但仍有一些副作用需要处理。

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>
Run Code Online (Sandbox Code Playgroud)

然后是另一个第二个活动和第三个活动。

我的情况如下:

1. LauncherActivity -> SecondActivity 
2. SecondActivity -> ThirdActivity (When launching ThirdAcitivity, SecondActivity will finish itself)
Run Code Online (Sandbox Code Playgroud)

所以当在 ThirdActivity 时,用户单击主页键。如果应用程序是从recentTask 打开的,则将显示上次打开的ThirdActivity。这是我想要的行为。

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

但是,如果应用程序强制停止然后重新启动或ThirdActivity 被销毁,则无需返回到ThirdActivity。回到 LauncherActivity 就OK了。

我一直在寻找解决方案。将最后一个活动保存到 sharedPreference 的建议不适合我的情况。

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

DsD*_*DsD 7

在您的Launcher 活动 onCreate()方法中,编写以下内容:

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

        finish();
        return;
}
Run Code Online (Sandbox Code Playgroud)

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