Android - 恢复上次查看的活动

Posted

技术标签:

【中文标题】Android - 恢复上次查看的活动【英文标题】:Android - restore last viewed Activity 【发布时间】:2010-11-29 19:38:25 【问题描述】:

我有 3 个不同的活动,用户在这些活动之间导航,没有特定的顺序。我的目标是双重的:

    当用户在应用程序恢复时切换到其他内容时,即使应用程序被终止,我也想从用户离开的地方开始 当上一个活动恢复时,我想将其恢复到上一次查看的状态(我认为我对如何实现这一点有一个很好的想法)

我认为问题不在于 start/stop - 我几乎可以得到我需要的东西,而是 onCreate() 如果应用程序被终止。在这种情况下 - 它会选择我在清单中配置的 Activity。我想我可以在该默认活动的onCreate() 方法中添加一些内容,但有没有更好的方法可能会丢失?

【问题讨论】:

【参考方案1】:

如果您的应用尚未“终止”,那么 #1 应该已经可以工作,而 #2 只需将所有未自动管理的值保存到 onSaveInstanceState() 的 Bundle 中,然后在 onRestoreInstanceState() 中恢复它们。

这是一种 hack,但我认为在应用程序实际被终止的情况下,#1 的最佳选择是将最近的 Activity 保存在每个 Activity 类的 onResume 中,然后在你第一次运行时您的第一个活动的 onCreate 进行检查然后启动正确的活动......甚至可能在开始时放入一个空白活动。像这样的:

开始活动:

public class StartActivity extends Activity 
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) 
            startActivityForResult(new Intent(this, MyActivity2.class));
         else if (last_activity == MyActivity3.getSimpleName()) 
            startActivityForResult(new Intent(this, MyActivity3.class));
         else 
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        
    

    public void onActivityResult() 
        // kill the activity if they go "back" to here
        finish();
    

然后在所有其他活动 (MyActivity1,2,3) 中保存如下值:

@Override
public void onResume() 
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();

您还必须手动处理保存/恢复每个活动的数据。您可以将所需的所有值保存到每个活动的 onPause() 中的首选项中,然后在 onResume() 中恢复它。

【讨论】:

感谢 fixedd,我不认为这是一个 hack。这听起来像调度员模式。我只是希望我遗漏了一些东西,并且有更简单的方法来做到这一点。 startActivity 怎么样,然后用 finish() 代替 startActivityForResult? 还要注意清单中的活动启动模式设置。我已将其设置为“singleTask”,但将其更改为“singleTop”以使其正确恢复上一个活动。我在intridea.com/blog/2011/6/16/… 找到了一个很好的解释【参考方案2】:

请记住,onSaveInstanceState() 不适用于长期状态,即用户关闭手机电源,然后在不确定的时间点将其重新打开。如果您希望您的状态能够在电源循环中存活,您将需要创建自己的长期状态机制。

【讨论】:

【参考方案3】:

我相信您想要实现 onSaveInstanceState 并将您的活动当前状态存储在一个包中。该捆绑包将在 onCreate 中传递到您的活动中,您可以使用它来重置您的值。

http://developer.android.com/guide/topics/fundamentals.html#actstate

【讨论】:

据我了解,这主要用于#2。我需要选择用户上次查看的活动。然后我可以恢复它的状态

以上是关于Android - 恢复上次查看的活动的主要内容,如果未能解决你的问题,请参考以下文章

Android - 按下时显示上次查看的活动(主页按钮 - >应用程序快捷方式)

java Onesignal:打开通知时恢复上次活动

Android阻止恢复活动

如何获取 android 设备“上次看到的活动”和“注册日期”

Android必知必会 - RecyclerView 恢复上次滚动位置

恢复后地图片段为黑色