保存Activity数据:onSaveInstanceState()与Bundle对象

onSaveInstanceState()

当Activity处于容易被系统销毁的状态时,Activity的onSaveInstanceState()就会被执行,这是系统在提供一个机会让我们保存数据。

调用时机:

  1. 按下HOME键,回到桌面
  2. 按下电源键,屏幕关闭
  3. 长按菜单键,选择运行其他的程序时
  4. 从当前Activity启动一个新的Activity时
  5. 屏幕方向切换时

该方法一定是在onStop()方法之前调用, 但是不确定是在onPause()方法之前还是之后调用。

用户主动销毁不会调用 : 当用户点击回退键或者调用了finish()方法, 不会调用该方法。

Activity的状态以键值对的形式保存在Bundle对象中,就是onSaveInstanceState()的参数。

Bundle对象

系统回收Activity调用了onDestroy(),但调用了onDestroy()并不表示出栈,返回栈中还有Activity的部分信息,返回键和finish()才会导致出栈。

Activity出栈Bundle对象也会销毁。Activity只要不出栈,Bundle对象就还在。

返回键和finish()会使当前Activity出栈,Bundle对象也会销毁。

系统回收Activity后,返回栈中还有该Activity的部分信息,所以按返回键还可以回到该Activity只是需要重新生成,此时Bundle对象还在。屏幕方向切换属于这种情况。

使用Bundle对象

onCreate()方法中的Bundle对象参数, 就是在onSaveInstance()方法中保存的Bundle对象。

你可能感兴趣的:(Android)