复习之路 一、Activity

2019-04-24  本文已影响0人  Mikk丶

1、Activity的生命周期

生命周期onCreate() ->onStart()-> onResume() -> onPause() -> onStop() -> onDestroy()
682504-1405607172778d9b.png

2、Activity异常情况下的生命周期

2.1、比如当资源相关的系统配置发生改变以及系统内存不足时,Activity就可能被杀死。
情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建

比如说当前Activity处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity就会被销毁并且重新创建,当然我们也可以阻止系统重新创建我们的Activity。
在默认情况下,如果我们不做特殊处理,那么当系统配置发生改变后,Activity就会被销毁并重新创建。


682504-c7df1f922a04d7c2.png

当系统配置发生改变以后,Activity会销毁,onPause、onStop、onDestroy均会被调用,由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity状态,这个方法的调用实际是在onStop之前,与onPause没有既定的时序关系。
当Activity重新创建后,系统会调用onRestoreInstanceState并且把Activity销毁时onSaveInstanceState方法保存的Bundle对象作为参数同事传给onRestoreInstanceState和onCreate方法。因此,我们可以通过onRestoreInstanceState和onCreate方法来判断Activity是否被重建了,如果被重建了,那么我们就可以去除之前保存的数据并恢复,从时序上来说,onRestoreInstanceState的调用时机在onStart之后。
同时,我们要知道,在onSaveInstanceState和onRestoreInstanceState方法中,系统自动为我们做了一定的恢复工作。比如文本框中用户输入的数据,ListView滚动的位置等。这些View相关的状态系统都能够默认为我们恢复。

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

同情况1数据存储和恢复完全一致,Activity安好优先级从高到底可以分为三种:

当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数据。

防止重新创建就可以给configChanges属性添加orientation这个值
android:configChanges="orientation"

3、Activity启动模式 ( LaunchMode )

四种启动模式:standard、singleTop、singleTask 和 singleInstance。
上一篇 下一篇

猜你喜欢

热点阅读