从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的建议对我的情况不利。
我想知道如何从最近的任务中实现启动。是否有人可以指导我。非常感谢。
答案 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"
。大多数应用程序都不需要它。