首先来幅很经典的图,看完之后再说话
1、启动一个新的Activity A,执行onCreate() -> onStart() -> onResume,此时该Activity获取焦点并且运行在前台。
2、当Activity A失去焦点但是仍然可见,也就是当我们重新启动一个新的Activity B,Activity B是透明的或者尺寸并不是全屏显示,这样我们还是可以看到底部的Activity A,但是它被Activity B覆盖或者部分覆盖,所以此时Activity A会执行onPause()方法。
3、当Activity A完全被另一个Activity B覆盖并且不可见,它就会执行onStop()方法。
4、当执行finish()方法或者系统回收该Activity的时候,执行onDestroy()方法。
5、当Activity获取到焦点的时候,也就是该Activity再次被置于前台的时候,会再次执行onResume方法。
6、当Activity由不可见变为可见的时候,会执行onRstart() -> onStart()方法。
问题:
1、onCreate(),onStart(), onRestart(), onResume(), onPause(), onStop(), onDestroy()的作用?
(1) onCreate()在Activity创建的时候执行的,在该Activity没有被销毁的前提下,onCreate()只会执行一次,除非Activity被回收,需要再次创建。所以onCreate()一般进行一些初始化操作,例如:initView(), initData()。
(2) onStart()和onRestart()的作用并不是很明显,它们的区别是,当Activity创建之后,会执行onStart()方法,但是不会执行onRestart()方法,当该Activity执行完onStop()之后,也就是该Activity不可见之后,我们再次回到该Activity变得可见的时候,它会执行onRestart() -> onStart()方法。
(3) onResume()方法是当Activity获得焦点的时候会执行,也就是该Activity被置于前台处于激活状态的时候执行,如果我们希望知道Activity是否被置于前台,我们可以在该方法中使用SharedPreferences设置一个标记变量为true,这样在后台,我们就可以通过查看这个标记来获取该Activity的状态。
(4) onPause()是在Activity失去焦点的时候执行和onStop()是在Activity变得不可见的时候执行,所以我们如果想知道Activity是否被置于后台变得不可见,同样可以使用SharedPreferences设置一个标记变量为false,这样在后台,我们就可以通过查看这个标记来得到Activity的状态。
(5) onDestroy()方法是在Activity被回收的时候执行,所以在onDestroy()方法里面,我们一般做一些资源回收的操作。
2、当启动一个Activity之后,然后点击Home键,Activity的声明周期函数的执行过程?
当点击Home键的时候,因为回到了桌面,所以Activity会失去焦点变得不可见,所以会执行onPause() -> onStop(),onDestroy()方法不执行,当系统把这个Activity回收掉的时候才会执行。
3、当启动一个Activity之后,点击Back回退键,Activity的声明周期函数执行过程?
当点击Back回退键的时候,相当于要退出该Activity,Activity的执行过为onPause() -> onStop() -> onDestroy()。