代码之家  ›  专栏  ›  技术社区  ›  Bostone

Android-恢复上次查看的活动

  •  9
  • Bostone  · 技术社区  · 15 年前

    我有3种不同的活动,用户可以不按特定顺序在它们之间导航。我的目标是双重的:

    1. 当用户切换到其他东西时,应用程序恢复,我想从用户离开的地方开始,即使应用程序被终止。
    2. 当上一个活动恢复时,我想将其恢复到上次查看的状态(我认为我对如何实现这个状态有一个很好的了解)。

    我想问题不是 启动/停止 -在那里我可以得到我需要的,但是 onCreate() 如果应用被终止。在这种情况下-它选择我在清单中配置的活动。我想我可以放点东西进去 OnCuto() 默认活动的方法,但有没有更好的方法可以让我错过?

    3 回复  |  直到 6 年前
        1
  •  6
  •   Jeremy Logan    15 年前

    如果您的应用程序没有“终止”,那么1应该已经工作了,而2只需要将没有自动管理的任何值保存到 onSaveInstanceState() 然后恢复它们 onRestoreInstanceState() .

    这是一种黑客行为,但我认为在应用程序实际被终止的情况下,您对1的最佳选择是将最近的活动保存在每个活动类的onresume中,然后当您第一次运行oncreate of your first activity时,进行检查,然后启动正确的活动…可能在开始的时候就放了一个空白的活动。像这样:

    StartActivity:

    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()中。

        2
  •  1
  •   MattC    15 年前

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

        3
  •  0
  •   Whaledawg    15 年前

    我相信您希望实现OnSaveInstanceState,这将把您的活动当前状态存储在一个包中。该捆绑包将在OnCreate中传递到您的活动中,您可以使用它重置值。

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