在后台丢失活动

问题描述 投票:0回答:1

我的应用程序中有四个活动:主要活动登录活动重置活动ContentActivity

MainActivity自动启动LoginActivity。

LoginActivity包含两个按钮:

执行ResetActivity /执行ContentActiviy。

如果用户选择ResetActivity,则此活动将自身调用三次(重新启动),只需增加“ step”(int参数)。

活动路径:

MainActivity ===> LoginActivity ===> ResetActivity(步骤1)===> ResetActivity(步骤2)===> ResetActivity(步骤3)。

我的问题是,当ResetActivity进入后台时,我的应用程序从MainActivity启动,我想让Activity保持当前步长值。

我尝试在ResetPasswordActivity中使用

@Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putInt("currentStep", step);
    }
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        avedInstanceState.getInt("currentStep", step);
    }

您知道如何处理此问题吗?

android android-activity
1个回答
0
投票

Android始终以android.intent.action.MAIN中的manifest开始活动除非应用程序正在运行,否则它将从堆栈顶部开始运行活动。

在您的resetActivty中使用此:

@Override
protected void onPause() {
    super.onPause();

    SharedPreferences prefs = getSharedPreferences("LAST", MODE_PRIVATE);
    Editor editor = prefs.edit();
    editor.putString("lastActivity", getClass().getName());
    editor.commit();
}

然后在您的MainActivity中使用此:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Class<?> activityClass;

    try {
        SharedPreferences prefs = getSharedPreferences("LAST", MODE_PRIVATE);
        activityClass = Class.forName(
            prefs.getString("lastActivity", ResetActivity.class.getName()));
    } catch(ClassNotFoundException ex) {
        activityClass = ResetActivity.class;
    }

    startActivity(new Intent(this, activityClass));
}
© www.soinside.com 2019 - 2024. All rights reserved.