一、什么是onsaveinstancestate
onsaveinstancestate()方法是用于保存fragment或activity的状态,当系统因为内存原因销毁该activity或fragment时,可以通过savedInstanceState获取之前保存的状态,以便于在activity或fragment重建后恢复数据。该方法必须要在activity或fragment销毁之前及时调用,以便于恢复数据的准确性。
二、为什么使用onsaveinstancestate
在用户使用app的过程中,可能会因为一些原因,如内存不足、横竖屏切换等,导致系统销毁当前的activity或fragment。如果没有保存状态,那么用户将会失去当前操作的数据,需要重新开始。使用onsaveinstancestate就能够很好的解决这个问题,当系统销毁之前,保存当前activity或fragment的状态,当重新创建该activity或fragment时,使用savedInstanceState来恢复当前操作的数据,提供更好的用户体验。
三、如何使用onsaveinstancestate
使用onsaveinstancestate需要遵循以下几个步骤:
1、在activity或fragment中重写onsaveinstancestate方法
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString(key,value); //保存数据
}
2、在onCreate方法中恢复数据
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
String value = savedInstanceState.getString(key); //获取数据
}
}
3、需要注意至少要先调用super.onSaveInstanceState方法,否则可能造成数据的丢失。
四、onsaveinstancestate与bundle的区别
onsaveinstancestate方法与bundle都是用于保存状态的工具,但是它们在使用方法和保存状态的范围上有所不同。
onsaveinstancestate方法是activity或fragment提供的一种保存状态的方法,其范围仅限于当前的activity或fragment,而bundle则是一种可以在各个组件及activity之间传递数据的工具。
使用onsaveinstancestate方法时,我们需要在重写方法中写明需要保存的数据和数据的key,而bundle中的数据,可以通过putExtra和getExtra方法来传递和获取。
五、使用onsaveinstancestate的注意事项
1、只有在系统销毁当前activity或fragment时,才会调用onsaveinstancestate方法来保存状态。
2、在使用onsaveinstancestate方法进行保存时,应该考虑到数据的大小,尽量避免保存过多或过大的数据。
3、当使用onsaveinstancestate方法时,系统会将savedInstanceState添加到activity的bundle中,所以如果你的activity或fragment提供了多个bundle,需要指定使用哪个bundle。
4、需要注意,savedInstanceState保存的数据只能在activity或fragment被销毁后恢复,如果使用finish()方法结束activity,则无法恢复其中的数据。
六、示例代码
1、保存数据到savedInstanceState中
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("key","value"); //保存数据
}
2、恢复数据
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
String value = savedInstanceState.getString("key"); //获取数据
}
}
七、总结
在android开发过程中,使用onsaveinstancestate能够很好的解决因系统销毁导致数据丢失的问题,提供更好的用户体验。在使用时需要注意保存数据的大小和数据的粒度,以避免过多或过大的数据导致性能问题。