Android生命周期

1.Activity生命周期详解

Activity状态#

首先我们知道,Activities在系统中管理着一个Activity栈,当有一个新的Activity启动的时候,新的Activity会在栈顶并且变成一个正在运行状态的Activity,之前的Activity一直会存在栈中,当新的Activity一直存在时,之前的Activity不会再一次出现在前台。

那么Activity有哪些状态呢?一共有如下四种状态。

如果一个Activity在前台屏幕上,那么它就处于运行状态。

如果一个Activity失去了焦点,但是在屏幕上仍然可见,那么它此时的状态就是处于暂停状态,即pause状态。一个暂停的Activity仍然是活着的,但是如果系统内存不足的情况下,它将会被系统杀死,系统会回收它的内存。

如果一个Activity被另外一个Activity完全覆盖,那么它此时的状态就是停止状态(stop),它仍然保留了全部的状态信息以及成员信息,由于它对用户是不可见的,所以它的窗口是隐藏的,当其他地方需要内存的时候,它会经常会被系统kill掉,回收它的内存。

如果一个Activity是暂停状态或者停止状态,系统会通过调用finish方法回收它的内存,或者简单的杀死他的进程,当它再一次需要向用户展示的时候,它必须启动至它之前的状态。

官方生命周期图


Android生命周期_第1张图片

2.Fragment 生命周期的详情


Fragment每个生命周期方法的意义、作用(注意红色的不是生命周期方法):

setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法。在该方法里面可以通过调用getUserVisibleHint()获得Fragment的状态是可见还是不可见的,如果可见则进行懒加载操作。

onAttach():执行该方法时,Fragment与Activity已经完成绑定,该方法有一个Activity类型的参数,代表绑定的Activity,这时候你可以执行诸如mActivity = activity的操作。

onCreate():初始化Fragment。可通过参数savedInstanceState获取之前保存的值。

onCreateView():初始化Fragment的布局。加载布局和findViewById的操作通常在此函数内完成,但是不建议执行耗时的操作,比如读取数据库数据列表。

onActivityCreated():执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,所以在该方法之前Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。

onStart():执行该方法时,Fragment由不可见变为可见状态。

onResume():执行该方法时,Fragment处于活动状态,用户可与之交互。

onPause():执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。

onSaveInstanceState():保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。

onStop():执行该方法时,Fragment完全不可见。

onDestroyView():销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。

onDestroy():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。

onDetach():解除与Activity的绑定。在onDestroy方法之后调用。

Fragment生命周期执行流程(注意红色的不是生命周期方法):

Fragment创建:setUserVisibleHint()->onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume();

Fragment变为不可见状态(锁屏、回到桌面、被Activity完全覆盖):onPause()->onSaveInstanceState()->onStop();

Fragment变为部分可见状态(打开Dialog样式的Activity):onPause()->onSaveInstanceState();

Fragment由不可见变为活动状态:onStart()->OnResume();

Fragment由部分可见变为活动状态:onResume();

退出应用:onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()(注意退出不会调用onSaveInstanceState方法,因为是人为退出,没有必要再保存数据);

Fragment被回收又重新创建:被回收执行onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetach(),重新创建执行onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint();

横竖屏切换:与Fragment被回收又重新创建一样。

官方生命周期图

Android生命周期_第2张图片

你可能感兴趣的:(Android生命周期)