了解了在onPause
点保存非UI信息的重要性,我试图用onSavedInstanceState
的代码替换我onPause
使用的代码。
因此,我将此代码保存并恢复ArrayList
savedInstanceState
的一部分:
public class SetUpPlayers extends Activity implements OnClickListener
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.set_up_players);
if (savedInstanceState != null)
setUpArrayList = (ArrayList<SetUpListItem>) savedInstanceState.getSerializable("setUpArrayList");
else
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable("setUpArrayList", (Serializable) setUpArrayList);
super.onSaveInstanceState(savedInstanceState);
}
如何使用onPause
将序列化的ArrayList
添加到savedInstanceState
将会选择的onCreate
?或者我需要从首选项中保存并加载它吗?
答案 0 :(得分:1)
您已将setUpArrayList
保存在实例状态Bundle中。每当重新创建此Activity实例时,此Bundle将传递到onCreate()
和onRestoreInstanceState()
中的活动。如果您的应用程序进入后台并且Android终止托管您的应用程序的进程,然后用户返回您的应用程序(通过再次启动它或从“最近任务”列表中选择它),就会发生这种情况。
但是,如果用户退出您的活动(例如,使用BACK按钮)然后再次启动您的活动,则传递给onCreate()
的实例状态将为null。如果您还希望能够在这种情况下恢复setUpArrayList
,那么您将需要将其存储在某些持久存储(数据库,共享首选项等)中。在这种情况下,您可以将setUpArrayList
序列化为String
并将其写入持久存储(或者您可以使用更结构化的方法,如XML或JSON)。您应该在onPause()
中执行此操作。然后,在onCreate()
中,如果实例状态参数为null,则可以从持久存储中恢复setUpArrayList
。