一、概述
Android的生命周期中有个方法onSaveInstanceState,它可以在Activity被销毁前保存它的状态,以便再次启动时恢复。onSaveInstanceState方法使用Bundle来保存与Activity相关的状态信息,诸如用户输入等。在Activity重新启动时,可以使用onCreate方法中的Bundle实例恢复状态。如果您想对Activity进行更改而不会丢失状态,则应使用onSaveInstanceState方法。
二、什么时候使用onSaveInstanceState?
在以下情况下使用onSaveInstanceState方法:
- 您需要保存临时状态(例如搜索文本框中的内容)。
- 您的应用程序需要保存用户输入以进行快速重建。
- 当用户旋转设备时, 它可以避免应用程序重新启动。
三、 onSaveInstanceState 方法中需要设置的值
在onSaveInstanceState的方法中,您需要为Bundle对象中的每个值设置一个String键及其对应的值。以下是一些需要在onSaveInstanceState方法中保存的内容:
- EditText中的值:在Input Fields中有很多输入文本框,如果用户输入的文本信息需要保存,那么在销毁Activity之前可以把它们的值一一取出保存到onSaveInstanceState方法中。
- ScrollView 位置值:如果有一个ScrollView , 那么可以通过getScrollY获取滚动的高度值并且保存.
- ListView位置值:如果Activity包含ListView,我们可以使用以下代码在 onSaveInstanceState 方法中保存其状态:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putIntArray("SCROLL_POSITION", new int[]{listView.getFirstVisiblePosition(), listView.getChildAt(0) != null ? listView.getChildAt(0).getTop() : 0}); }
四、onSaveInstanceState 方法如何得到恢复的数据
在恢复状态时,在Activity的onCreate(或onRestoreInstanceState,如果Bundle被传递到该方法)方法中将Bundle作为参数传递。可以使用Bundle中的值和它们的相应键来获取保存的状态。在onCreate方法中,您可以检查Bundle是否为空,并查找与Activity相关的存储的状态信息,例如EditText中设置的文本等。
public class MainActivity extends AppCompatActivity { private static final String KEY_MESSAGE = "KEY_MESSAGE"; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.edit_text); if (savedInstanceState != null) { String message = savedInstanceState.getString(KEY_MESSAGE); if (message != null) { editText.setText(message); } } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(KEY_MESSAGE, editText.getText().toString()); } }
五、onSaveInstanceState 方法的注意事项
- 只能在Bundle中保存基本类型,如int,float,String等。这意味着如果要存储自定义对象,则需要将它们序列化以便存储在Bundle中。
- 不要在onSaveInstanceState方法中放太多数据。Bundle实例的大小有限制,过多的数据可能会导致应用程序崩溃。
- Bundle是有限制的(一般是 1MB),所以请确保您没有保存太多的信息。
六、总结
onSaveInstanceState方法时Android应用程序中常用的一种技术。将Activity中的状态或数据保存在onSaveInstanceState()方法中,以便在设备重新启动或调用onCreate()方法时能够恢复。