2009-09-20 68 views
9

我有3种不同的活动,用户之间以无特定顺序导航。我的目标是双重的:Android - 恢复上次查看的活动

  1. 当用户切换到别的东西时,应用程序恢复,我想谈谈在那里用户离开,即使应用程序被终止
  2. 当最后一个活动恢复我想将其恢复到上次查看状态(这个我觉得我对如何才达到一个不错的主意)

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

回答

6

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

这是一种破解,但我认为在应用程序实际被终止的情况下,您最好的选择是将最近的Activity保存在每个Activity类的onResume中,然后当您第一次运行你的第一个活动的onCreate做一个检查,然后开始正确的活动...也许甚至在一开始就把一个空白的活动。事情是这样的:

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()中将其恢复。

+0

谢谢fiXedd,我不认为这是一个破解。这听起来像一个调度模式。我只是希望我错过了一些东西,还有更简单的方法。 – Bostone 2009-09-20 18:38:39

+0

如何做startActivity,然后完成()而不是startActivityForResult? – 2011-08-20 19:06:42

+0

还要注意清单中您的活动launchMode设置。我已将它设置为“singleTask”,但将其更改为“singleTop”以便正确恢复最后一次活动。我在http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode找到了一个很好的解释。 – 2012-12-14 12:02:15

0

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

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

+0

据我了解,这主要用于#2。我需要选择用户最近查看的活动。然后我可以恢复其状态 – Bostone 2009-09-20 02:31:58

1

请注意,onSaveInstanceState()对于长期状态不可行,即用户将电话关闭,然后在不确定点将其重新打开。如果您希望您的州能够通电,您需要创建自己的长期状态机制。