Activity生命周期及方法

2019-02-18  本文已影响0人  红茶炒饭
当单独一个Activity启动时,任何启动模式~

onCreate()

在Activity创建时调用,通常做一些初始化设置。
这个方法只会被调用一次

setContentView()
为Activity设置所要使用的布局文件

onContentChanged()
在setContentView()执行完成之后回调

onStart()

当Activity可见未获得用户焦点不能交互时系统会调用

onPostCreate()
Activity彻底运行起来之后的回调 - 通常用不到

onResume()

当Activity可见且获得用户焦点能交互时系统会调用

onPostResume()
activity真正获取焦点之后回调,此方法在onResume()方法之后 - 通常用不到

onAttachedToWindow()
在第一次调用onDraw前调用的,也就是我们写的View在没有绘制出来时调用的,但只会调用一次。

onCreateOptionsMenu();
onPrepareOptionsMenu();
onOptionsItemSelected();
onMenuOpened();
onOptionsMenuClosed();

与toolBar右侧的菜单相关的方法

onRestart()

当Activity已经停止然后重新被启动时系统会调用

onPause()

在当前Activity被其他Activity覆盖或锁屏时调用

onStop()

在Activity对用户不可见时调用

onDestroy()

在Activity销毁时调用

onDetachedFromWindow()
销毁View的时候,这个View不再显示,这个时候我们就可以在这个方法做一些收尾工作,如:取消广播注册,子线程等

onCreate和onStart之间有什么区别?
可见与不可见的区别。前者不可见,后者可见。
onCreate方法只在Activity创建时执行一次,而onStart方法在Activity中被多次调用。onCreate能做的事onStart其实都能做,但是onstart能做的事onCreate却未必适合做。如前文所说的,setContentView和资源初始化在两者都能做,然而想动画的初始化在onStart中做比较好。

onStart方法和onResume方法有什么区别?
是否在前台。onStart方法中Activity可见但不在前台,不可交互,而在onResume中在前台。
职责不同,onStart方法中主要还是进行初始化工作,而onResume方法,根据官方的建议,可以做开启动画和独占设备的操作。

onPause方法和onStop方法有什么区别?
是否可见。onPause时Activity可见,onStop时Activity不可见,但Activity对象还在内存中。
在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。

额外的方法

//获取Launcher第一帧
@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    }

onNewIntent()
当一个Activity被重新启动时候,如果该Activity没有被重新创建,那么就会调用此方法

onLowMemory()
onTrimMemory()

当系统内存不够的时候会调用,我们可以在这两个方法中手动释放资源

startActivForResult()
当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity 的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。

跳转standard

假设A跳B
B的启动模式是standard

A onPause()
B onCreate()--onResume()
A onStop()

B返回到A

B onPause()
A onRestart()--onResume()
B onStop()---onDestory()

结论:
先将原来的Activity暂停(onPause),然后将将要展示的Activity获取焦点,最后将原Activity隐藏获销毁

跳转singleTop

假设A跳B
B的启动模式是singleTop

B已经在栈顶
B onPause()--onNewIntent()--onResume()
B不在栈顶
B 创建新的Activity

跳转singleTask

假设A跳B
B的启动模式是singleTask

B已经在栈顶
B onPause()--onNewIntent()--onResume()
B不在栈顶
先销毁中间所有的Activity--顶层onPause()--B onNewIntent()--onRestart()-- onStart()--onResume()--顶层Activity销毁

Acticvity的启动模式会影响结果

startActivForResult--onActivityResult()--onRestart()

横竖屏切换

在不同的真机上 onStop() 和 onSaveInstanceState() 的执行顺序会有差别

onPause()

onStop()

onSaveInstanceState()
当某个activity变得"容易"被系统销毁时,该activity的onSaveInstanceState()就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的候。 如果我们需要覆写onSaveInstanceState()方法, 一般会在第一行代码中调用该方法的默认实现:super.onSaveInstanceState(outState)。与此同时,当我们需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法。

onDestroy()

onCreate()

onStart()

onRestoreInstanceState()
取出我们在onSaveInstanceState()中所保存的值 我们的onCreate()中super.onCreate(savedInstanceState);
这个savedInystanceState对象也可以取出值

onResume()

上一篇下一篇

猜你喜欢

热点阅读