onPause而不是onSaveInstanceState

时间:2014-01-04 08:27:01

标签: android android-activity

了解了在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?或者我需要从首选项中保存并加载它吗?

1 个答案:

答案 0 :(得分:1)

您已将setUpArrayList保存在实例状态Bundle中。每当重新创建此Activity实例时,此Bundle将传递到onCreate()onRestoreInstanceState()中的活动。如果您的应用程序进入后台并且Android终止托管您的应用程序的进程,然后用户返回您的应用程序(通过再次启动它或从“最近任务”列表中选择它),就会发生这种情况。

但是,如果用户退出您的活动(例如,使用BACK按钮)然后再次启动您的活动,则传递给onCreate()的实例状态将为null。如果您还希望能够在这种情况下恢复setUpArrayList,那么您将需要将其存储在某些持久存储(数据库,共享首选项等)中。在这种情况下,您可以将setUpArrayList序列化为String并将其写入持久存储(或者您可以使用更结构化的方法,如XML或JSON)。您应该在onPause()中执行此操作。然后,在onCreate()中,如果实例状态参数为null,则可以从持久存储中恢复setUpArrayList