Activity生命周期及方法
当单独一个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的启动模式是standardA onPause()
B onCreate()--onResume()
A onStop()B返回到A
B onPause()
A onRestart()--onResume()
B onStop()---onDestory()结论:
先将原来的Activity暂停(onPause),然后将将要展示的Activity获取焦点,最后将原Activity隐藏获销毁
跳转singleTop
假设A跳B
B的启动模式是singleTopB已经在栈顶
B onPause()--onNewIntent()--onResume()
B不在栈顶
B 创建新的Activity
跳转singleTask
假设A跳B
B的启动模式是singleTaskB已经在栈顶
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()