Activity 缓存


假设我们在使用activityA  这时来了一个电话,当再次回来时activity A执行的就不是onRestart方法,而是onCreate方法重新创建一次,这样的话我们之前A中的一些临时数据或者状态信息等可能就会丢失

那么,我们该如何对这些临时数据和状态进行保存呢?

Activity中提供了onSaveInstanceState回调方法,我们可以通过它保存临时数据和状态,方法中有一个Bundle参数,可以通过它的putString()、putInt()等方法传入需要保存的临时数据和状态。数据保存之后会在onCreate中恢复,onCreate也有一个Bundle类型的参数,通过它获取缓存下来的数据。

Activity 的onSaveInstanceState和onRestoreInstanceState 并不是和onCreate()、onStart()等生命周期方法一样,按一定顺序执行。这两个方法不一定每次都会执行,它们只有在特定情况下才会触发。如果当用户主动去销毁Activity时,是不会被调用的。所以通常情况下onSaveInstanceState只适合保存一些临时的状态,而onPause()适合用于数据的持久化保存。

其实,activity还提供了onRestoreInstanceState回掉方法,它也有一个Bundle参数,作用就是用来恢复onSaveInstanceState中缓存的临时数据,但它与onSaveInstanceState不一定是成对出现的,只有activity真正的被系统销毁了它才会被调用,而且是在onStart方法后被调用

所以我们可以选择在onCreate方法或者onRestoreInstanceState方法中进行临时数据和状态的恢复。


  1. @Override  
  2.     protected void onCreate(Bundle savedInstanceState) {  
  3.         super.onCreate(savedInstanceState);  
  4.         setContentView(R.layout.activity_main);  
  5.         //当Acivity第一次被创建的时候为空
  6.         if( savedInstanceState != null ){  
  7.             savedInstanceState.getString("data");  
  8.         }  
  9.     }  
  10.   
  11.     @Override  
  12.     protected void onSaveInstanceState(Bundle outState) {  
  13.         super.onSaveInstanceState(outState);  
  14.         outState.putString("data","test data");  
  15.     }  

应用场景

1.按Home键,系统不确定按Hone键之后用户的其他操作是否会导致资源占用等问题从而使activity被销毁,所以调用onSaveInstanceState方法以防万一

2.横竖屏切换,横竖屏切换时activity会销毁然后重新创建

3.按电源键锁屏

4.从当前activity跳转到一个新的activity

总之,那些未经用户许可,而是由系统自动回收的activity都会在销毁前调用onSaveInstanceState方法对数据、状态进行缓存


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值