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

时间:2010-03-14 04:35:08

标签: android

是否可以配置Android应用程序,以便在用户打开您的应用程序时,启动了大量活动,然后返回到主屏幕并再次重新启动您的应用程序,而不是转到主要活动,而不是转到主要活动。堆栈中的活动最高(您应用中的最新活动)?

3 个答案:

答案 0 :(得分:49)

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

要实现您所描述的内容,您只需将最后一个可见活动存储在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();
}

Dispatcher 活动类似于以下内容:

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覆盖
  • 创建基类
  • Dispatcher 活动显然需要android.intent.action.MAIN行动

答案 1 :(得分:6)

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

AndroidManifest.xm

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

了解'android:exported'&amp; 'android:alwaysRetainTaskState'在这里:

android:exported

android:alwaysRetainTaskState

答案 2 :(得分:4)

是默认行为,之前已多次询问此问题: Android: keep task's activity stack after restart from HOME
Android Run application from last Activity

请注意,如果您从Eclipse启动应用程序,则会破坏此默认功能。更改启动配置以启动无活动应解决问题。

但是,由于此行为在过去几周的Eclipse ADT插件的0.9.6 release中得到修复,因此您不再需要这种解决方法:

  

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