即使应用程序在android中关闭,也可以保存活动的会话

时间:2017-03-13 17:58:28

标签: android session android-activity login

我在Android中有一个多步骤表单屏幕,用户必须填写他们的用户名等,如果用户跳过步骤并关闭应用程序并让用户填写用户名字段,我希望重新出现未完成的屏幕只能继续......

1 个答案:

答案 0 :(得分:0)

关于生命周期活动的研究。

enter image description here

保存在SharedPreferences或捆绑。

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
}

被调用以在被杀死之前从活动中检索每个实例状态,以便可以在onCreate(Bundle)或onRestoreInstanceState(Bundle)中恢复状态(由此方法填充的Bundle将被传递给两者)。 在活动可能被杀死之前调用此方法,以便在将来某个时间返回时可以恢复其状态。例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态,以便在用户返回时对于活动A,可以通过onCreate(Bundle)或onRestoreInstanceState(Bundle)恢复用户界面的状态。 不要将此方法与活动生命周期回调混淆,例如onPause(),当活动被放置在后台或者去往破坏的路径时,或者在销毁之前调用的onStop()时,它会被调用。调用onPause()和onStop()时的一个示例,而不是此方法是当用户从活动B导航回活动A时:不需要在B上调用onSaveInstanceState(Bundle),因为该特定实例永远不会被恢复,所以系统避免调用它。调用onPause()而不是onSaveInstanceState(Bundle)的示例是在活动A前面启动活动B时:如果在活动A的生命周期内没有杀死活动A,系统可能会避免调用onSaveInstanceState(Bundle)。 B因为A的用户界面的状态将保持不变。 默认实现通过在具有id的层次结构中的每个视图上调用onSaveInstanceState()并保存当前聚焦视图的id(所有这些都由以下内容恢复)来为您处理大多数UI每实例状态。 onRestoreInstanceState(Bundle)的默认实现)。如果重写此方法以保存每个单独视图未捕获的其他信息,则可能需要调用默认实现,否则请准备好自己保存每个视图的所有状态。 如果调用,此方法将在onStop()之前发生。无法保证它是在onPause()之前还是之后发生。

将数据保存在sharedPreferences或bundle中。

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

当从以前保存的状态重新初始化活动时,在onStart之后调用此方法,此处在savedInstanceState中给出。大多数实现只是使用onCreate来恢复它们的状态,但是在完成所有初始化之后有时可以方便地执行此操作,或者允许子类决定是否使用默认实现。此方法的默认实现执行先前已被onSaveInstanceState冻结的任何视图状态的恢复。 在onStart和onPostCreate之间调用此方法。