您的位置:首页 > 移动开发 > Android开发

Android开发艺术探索--第一章生命周期和启动方式总结(1)

2016-08-18 10:45 459 查看
最近在拜读任主席的Android开发艺术探索,现在看了一半,再回头看前面的,感觉跟没有看一样,所以还是把知识点总结一下吧

第一节,生命周期分析之典型情况下生命周期分析

生命周期各个回调方法以及顺序



每个方法的具体作用就不说了,来看一下具体几种情况下回调顺序:

第一次启动,回调:onCreate -> onStart -> onResume

当用户打开新的Activity或者切换到桌面时,回调:onPause -> onStop,如果新打开的Activity是透明主题的话,那面当前的Activity不会回调onStop

当用户再次回到原Activity时,回调:onRestart -> onStart -> onResume

当用户按下back键回退时,回调:onPause -> onStop -> onDestory

当Activity被系统回收后再次打开,生命周期的回调方法过程和第一次一样,不过会有个别的方法被调用(onRestoreInstanceState,下面再说这个问题)

通过Activity是否可见,onStart和onStop对应;Activity是否可操作,onPause和onResume对应

新打开Activity时,当前Activity会先调用onPause方法,然后新Activity会onCreate -> onStart -> onResume,这个时候旧Activity才会调用onStop方法,所以如果要新打开的Activity能尽快的显示在用户眼前,在onPasue方法中尽量不要做重量级操作

第二节生命周期分析之异常情况下生命周期分析

  异常情况就是Activity被系统kill掉的情况,被kill掉也分两种情况

1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建,这种情况的典型就是横竖屏翻转

2. 内存资源不足导致低优先级的Activity被杀死

  这两种情况下生命周期的回调方法一致,这里再引入两个回调方法:onSaveInstanceState和onRestoreInstanceState,当Activity被异常情况下销毁的时候,onPause、onStop、onDestory都会被调用,并且系统会调用onSaveInstanceState来保存当前Activity的状态,这个方法会在onStop之前调用,跟onPasue没有固定的时序关系(这个坑我踩过),正常退出Activity的情况下是不会调用这个方法的。当Activity被重新创建后,系统会调用onRestoreInstanceState,并把onSaveInstanceState方法里保存的bundle对象作为参数传递给onRestoreInstanceState和onCreate方法,onRestoreInstanceState在onStart方法之后调用。

  我们可以自己在这两个方法中保存和恢复我们自己的数据,系统也会自动为我们做一定的恢复工作,Activity的视图结构,文本框的输入数据,ListView的滚动位置等,这些View相关的状态系统都能默认为我们恢复,这些View都实现了这两个方法,当需要恢复数据的时候,Activity会调用onSaveInstanceState去保存数据,然后委托Window保存数据,Window再委托它上面的顶层容器去保存数据,顶层容器再去通知它的子元素去保存数据,整个数据的保存过程就完成了。

系统配置中有很多内容,如果当某项内容发生改变后,我们不想系统重新创建Activity的话,需要在清单文件里面给Activity指定configChanges属性,具体属性可以看开发者文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 生命周期
相关文章推荐