如何使Android应用程序在重新启动时返回上次打开的活动?
是否有可能configuration一个Android应用程序,以便如果用户已经打开您的应用程序,启动了许多活动,然后返回到主屏幕,并重新启动您的应用程序,而不是去主要活动,他们将被带到最高的活动在堆栈上(您的应用程序中最近的活动)?
当通过主屏幕上的图标启动时,Android将始终使用AndroidManifest.xml
的android.intent.action.MAIN
filter启动活动,除非应用程序已在运行(在这种情况下,它显然将恢复活动堆栈)。
为了实现您所描述的内容,您可以简单地将最后一个可见活动存储在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启动的应用程序就像在主屏幕上单击一样。