如何使Android应用程序在重新启动时返回上次打开的活动?

是否有可能configuration一个Android应用程序,以便如果用户已经打开您的应用程序,启动了许多活动,然后返回到主屏幕,并重新启动您的应用程序,而不是去主要活动,他们将被带到最高的活动在堆栈上(您的应用程序中最近的活动)?

当通过主屏幕上的图标启动时,Android将始终使用AndroidManifest.xmlandroid.intent.action.MAINfilter启动活动,除非应用程序已在运行(在这种情况下,它显然将恢复活动堆栈)。

为了实现您所描述的内容,您可以简单地将最后一个可见活动存储在SharedPreferences并根据首选项SharedPreferences一个启动最后活动的Dispatcher活动。

所以在你想要自动重新开始的每一个活动中:

 @Override protected void onPause() { super.onPause(); SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE); Editor editor = prefs.edit(); editor.putString("lastActivity", getClass().getName()); editor.commit(); } 

分派器活动类似于以下内容:

 public class Dispatcher extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Class<?> activityClass; try { SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE); activityClass = Class.forName( prefs.getString("lastActivity", Activity1.class.getName())); } catch(ClassNotFoundException ex) { activityClass = Activity1.class; } startActivity(new Intent(this, activityClass)); } } 

备注

  • 你可以为onPause覆盖创build一个基类
  • Dispatcher活动显然需要是android.intent.action.MAIN操作

这并不复杂。 你只需要操纵清单。

AndroidManifest.xm

 <activity android:name=".MainActivity" android:alwaysRetainTaskState="true" android:exported="true" . . . 

在这里阅读关于'android:exported'和'android:alwaysRetainTaskState':

机器人:出口

机器人:alwaysRetainTaskState

默认的行为,这个问题之前已经被问过几次了: Android:从HOME重新启动后保留任务的活动堆栈
Android从上次Activity运行应用程序

请注意,如果您从Eclipse启动您的应用程序,那么打破了这个默认function。 更改启动configuration以启动无活动应该可以解决问题。

但是,由于这个行为在过去几周的Eclipse的ADT插件的0.9.6版本中已经修复,所以不再需要这种解决方法:

现在从ADT启动的应用程序就像在主屏幕上单击一样。