生命周期--保存&&恢复activity

来源:互联网 发布:cf手雷威力排行 数据 编辑:程序博客网 时间:2024/06/05 19:30

android开发生命周期

  • 什么情况下需要保存activity的状态信息
  • 如何保存,是在android生命周期的哪个时间段保存。

保存activity状态

  • onSaveInstanceState:保存activity状态信息
  • onRestoreInstanceState:恢复前一个activity的状态

保存activity的状态用到的是栈,先进后出

何时调用onSaveInstanceState和onRestoreInstanceState

只有涉及到当前activity跳转到其他activity时候才会用到保存状态信息
- back
- Home
- destroy

  1. back生命周期如下:

    1. onCreate–onStart–onResume–onPause–onStop–onDestroy
    2. 可以很清楚的看出来,这个过程当中是不存在调用保存状态信息的调用
    3. 也可以看出在android设计者认为,当用户点击back退出系统时,就没比较保存状态信息,此时可以看作是用户不想再次进入这个activity当中了。
  2. Home

    1. 退出时:

      1. onCreate–onStart–onResume(创建一个新的activity一定要走到这一步才算)–onPause(一旦需要退出,系统最先做出的反义一定是onPause)–onSaveInstanceState–onStop–onDestroy;
      2. 以上可知:activity的创建过程都会有以上最开始的三步
      3. 当一个activity需要终止的时候最先应该调用的是onPause,然后才是保存状态信息。
      4. 保存完了状态信息才会终止和销毁。
    2. 恢复时:

      1. onCreate–onStart–onRestoreInstanceState–onResume
      2. 可知:当一个activity需要出现时,如果他只是暂时的隐藏在后面,则属于onStop,再次启动时候不需要调用onRestoreInstanceState,直接从onStart开始就好了。
      3. 如果的activity被onDestroy掉了,要想再次恢复activity则必须要调用onRestoreInstanceState
  3. 从其他应用用跳转回来(A—–B——A)
    1. 生命周期如下:onCreate–onStart—onResume—onPause(activityA准备跳转到activityB)—onSaveInstanceState—onStop(此时activityA只是暂时失去焦点在后台,并没被onDestroy掉)—onRestart—onResume—onDestroy(activityB被后台回收掉)

总结

  • 评判是否调用onSaveInstanceState的关键点在:activity是否存在被destroy掉的风险

    • 当activity只是因为一个悬浮窗口而暂时失去焦点。当再次获得焦点时候,连onStart这种笨重的过程都不需要,只要onResume。
    • 当activity只是因为暂时因为activity之间的跳转而转到后台运行时,此时android系统会将这个activity保存在内存当中,一般是不会被销毁的,除非内存不够用的时候。再次启动的时候,只需要调用onRestart—onStart这个过程就好。

      • 与上面想比较,主要存在一个android要重新绘制界面吧???
    • 当用户不断点击back按键退出activity的时候,android系统认为这是用户不再需要保存使用这个activity了,所以只要也没有必要保存activity的状态信息。

    • 最后,点击Home键退出,android系统会认为这个意外退出,用户可能还需要再次进入。所以这个时候是需要保存状态信息的。
      • 在用户点击Home退出时候,直到onPause才会执行保存状态信息的操作。
      • 保存完了状态信息,此时这个activity是要被onDestroy掉的
      • 当这个activity再次启动之时,先要创建onCreate—onStart — onRestoreInStanceState(恢复状态信息)—onResume.

保存状态信息在onResume之后,恢复状态信息在onResume之前

保存状态信息&&恢复状态信息

  • 保存状态信息—一般保存的是activity视图的状态信息,比如说EditText的位置…..
  • 保存状态信息是存放在一个bundle当中。

  • 恢复状态信息一般会传入bundle,如果其中的值为null的时候。才会自己创建,不然的话只能是按照传入的bundle信息将其重新刻画
0 0