从后台恢复Android应用程序堆栈

16

假设我从主屏幕启动我的应用程序,浏览一些活动,然后按下home键并在Gmail应用程序中做其他事情。

当我完成查看邮件后,再次按下home键离开Gmail应用程序,并再次点击主屏幕上的我的应用程序图标返回到它。

当我回到我的应用程序时,我希望它返回到我之前所在的最后一个活动,而不是开始一个全新的会话。我一整天都在试图解决这个问题。

我的第一个活动的清单如下:

 <activity android:name=".Main"
              android:label="@string/app_name"
              android:screenOrientation="portrait"
              android:alwaysRetainTaskState="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

类别属性 LAUNCHER 使得我的应用始终从活动 Main 开始,因此我不知道如何恢复上次的活动。有人告诉我使用 sharedpreferences 来保存上次的活动并在启动时加载它,但我不认为这是最优雅的解决方法。


你的清单看起来很好,应该按照你的期望工作。有没有可能你只是在调试器下看到了这个问题,就像这个几乎相同的问题?https://dev59.com/7UvSa4cB1Zd3GeqPdU-3#2061447 - Christopher Orr
5
我在收到你的答复时就已经弄清楚了,这与Eclipse的调试无关,而是与运行配置有关:我将启动操作设置为了“在Android选项卡下启动默认活动”。我将其更改为“什么都不做”,问题就解决了。真不敢相信我花了这么长时间才意识到这一点!谢谢。 - jlim
4
你应该在你的回答中添加一个答案。 - Kenny Evitt
3个回答

1
我认为这是唯一的方法,因为当你启动一个应用程序时,启动器应用程序会发送意图“android.intent.action.MAIN”,而在您的应用程序中唯一响应此意图的活动是您的主要活动,因此它会被激活。所以你唯一能做的就是在某个地方保存你的会话,在活动启动时,如果已经保存了会话,将应用程序恢复到先前的状态。

0

尝试在您的清单文件中使用以下之一:

 <activity android:launchMode=["multiple" | "singleTop" |
                              "singleTask" | "singleInstance"] ...

0

onResume()和onPause()是否已经正确实现?

protected void onResume(){
    super.onResume();
}

protected void onPause() {
    super.onPause();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接