学习了那么就,android的代码,关于android的数据保存情况,一直都没有写过,在之后的学习中才发现,竟然有如下的方法,当手机内存不足的情况下,可以保存重要数据,然后再关闭程序,在启动应用的时候,在读取原来的数据。


我的程序是这样操作的:

一、打开应用程序,然后使用back按钮回退出来,这个使用的LOG信息如下:

MyAppliction onCreate myAppliction start

MyAppliction onCreate myAppliction = null

onCreate

onStart
onResume
onPause
onStop
onDestroy


这个是很正常的LOG信息。。。

第一行和第二行是关于Application的onCreate操作,这次可以不用理会。。。。

这里可能会有疑问,那就是为什么在点击BACK按钮的时候,没有调用onSaveInstanceState的方法,原因在于BACK是用户主动退出需要销毁的,所以就没有进行保存的必要了。


二、第二次我的操作步骤为:

启动程序(先前没有启动过),按HOME按钮回到HOME窗口,生成如下LOG信息:


MyAppliction onCreate myAppliction start
MyAppliction onCreate myAppliction = null
onCreate
onStart
onResume
onSaveInstanceState start
onPause
onStop

以上看出:

当我点击HOME按钮的时候,系统就自动调用了onSaveInstanceState的函数,所以onSaveInstanceState的函数调用原则,其实并不在内存空间匮乏的时候调用,而是在点击HOME按钮之后,进程被终止和重启,在讲UI的数据保存到Bundle中。。。在调用系统的关闭函数(并没有调用OnDestroy函数进行销毁)


启动360清楚全部内存(模拟内容匮乏的情况),在点击应用程序启动应用。

MyAppliction onCreate myAppliction start
MyAppliction onCreate myAppliction = null
onCreate
onStart
onRestoreInstanceState start
onRestoreInstanceState Hello
onResume





这个是进入内容,在显示界面之后(onStart)之后调用了,onRestoreInstanceState的函数,说明这个时候进行了UI的数据恢复,并且也娶到需要的数据。。。。


这样可以保证,我们在界面需要重要数据的时候,用户点击home界面导致数据没有保存,而出现的错误情况。。。




在查询了onRestoreInstanceState和onSaveInstanceState的函数之后,得到的解释如下:大家一起好好学习一下:

onSaveInstanceState方法会在什么时候被执行,有这么几种情况:

1、当用户按下HOME键时。

这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则


2、长按HOME键,选择运行其他的程序时。


3、按下电源按键(关闭屏幕显示)时。


4、从activity A中启动一个新的activity时。


5、屏幕方向切换时,例如从竖屏切换到横屏时。

在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行

总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。



至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行


另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原



关于这次的测试代码为;

@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState){super.onRestoreInstanceState(savedInstanceState);System.out.println("onRestoreInstanceState start");String string = savedInstanceState.getString("key");System.out.println("onRestoreInstanceState " + string);}@Overrideprotected void onSaveInstanceState(Bundle outState){super.onSaveInstanceState(outState);System.out.println("onSaveInstanceState start");outState.putString("key", "Hello");}




更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android(安卓)Wifi模块分析(三)
  7. Android中dispatchDraw分析
  8. Android四大基本组件介绍与生命周期
  9. Android(安卓)MediaPlayer 常用方法介绍

随机推荐

  1. Android学习笔记二 IPC机制
  2. Android(安卓)studio打包jar
  3. Native Service 创建过程
  4. Android三种网络通讯方式及Android的网络
  5. vlc-android 移植live555到android
  6. Android换肤技术总结
  7. Android StrictMode 严苛模式
  8. android NDK环境搭建【针对EClipse】
  9. 【错误记录】Android 内存泄漏 错误排查
  10. Android(安卓)点击两次返回键 退出程序