Activity生命周期:
onCreate
Activity第一次被创建的时候进行回调,一般都会重写该方法初始化布局资源,setContextView(Layout),初始化控件
onStart
该方法表示当前Activity正在启动,此时Activity已经处于可见状态,但是屏幕上并没有显示且无法与客户进行交互
注:onStart方法和onResume方法的区分就是Activity都是处于可见状态,但是后者可以与用户进行交互,通俗说就是可以获取到焦点
onResume
此方法表示当前Activity可见并可以与用户进行交互
当此Activity调用了onPause和onStop方法后,重新回到前台会调用此方法,从而可以在此方法内初始化一些资源,例如重新初始化在onPause方法中释放的资源
onPause
此方法表示当前Activity正在停止,一般此方法调用后会立即执行onStop方法,可以在此方法中释放一些资源,但是不能太耗时,原因是因为跳转到下一个Activity的时候会先执行完此方法才会执行下一个Activity的onResume方法
onStop
一般在onPause方法后立刻执行,表示Activity即将停止或完全被覆盖,此时的Activity不可见并仅在后台执行,不可以执行耗时操作
注:如果是在当前Activity上弹出一个对话框(Dialog)的话,如果不完全覆盖整个屏幕的话就不会调用onStop方法,
onDestroy
表示当前Activity正在被销毁,生命周期最后一个执行方法,可以进行一些资源的释放和销毁工作
onRestart
此方法表示Activity正在重新启动,由不可见变为可见,如跳转到另一个Activity后(onPause和onStop)再返回,会调用此方法
onSaveIntanceState
当Activity生命周期不正常或非正规销毁等,可以用来临时保存一些非永久数据,一些常用基础控件如TextView等系统会自动保存,调用super,可以将其他重要数据保存在Bundle对象中,可以在onRestoreInstanceState中返回的Bundle中获取,也可以在onCreate中获取
此方法调用的几个事件:按Home键(Activity会进入后台);电源键锁屏(屏幕关闭,进入后台);启动其他Activity(Activity被压入了任务栈的栈底);横竖屏切换(会销毁当前Activity重建)可以在AndroidMainfest清单文件中的Activity中设置android:configChanges="keyboardHidden|orientation|screenSize"
注意事项:用户主动退出按返回键或调用finish()方法销毁不会调用此方法;此方法一定在onStop方法之前调用
onRestoreIntanceState
在Activity被系统销毁后再恢复Activity的时候会调用,可以通过Bundle对象获取之前保存的数据
Activity启动模式:
standard(默认模式)
默认的启动模式,如不指定android:LaunchMode,则默认为此模式
此模式是每启动一个Activity就会重新创建一个新的实例,如A-A-A-B,则任务栈中从上到下为BAAA
singleTop(栈顶复用模式)
此模式下如果新的Activity已经处于栈顶,则Activity不会重新创建新的实例,会调用onNewIntent方法,并且onCreate和onStart方法不会调用,如果新的Activity不位于栈顶,则会重新创建新的实例
例子:A-B-A-A-B-B,则任务栈中从上到下为BAABA
singleTask(栈内复用模式)
此模式下如果新的Activity已经处于栈内,则Activity不会重新创建新的实例,不管是否处于栈顶,都会复用,并将栈内它上面所有的Activity全部移出栈,并调用onNewIntent方法
例如:A-A-B-B-C-C-B则任务栈从上到下为BA 另一个例子:A-A-B-B-C-C-B-A则任务栈从上到下为A
singleInstance(全局唯一模式)
此模式下Activity会单独占用一个Task栈,具有全局唯一性,整个手机系统中就只有这么一个实例,后续的请求中都不会创建新的Activity,除非这个特殊的任务栈被销毁了
如果在启动此模式下的Activity时,已经存在此全局唯一实例,则会将其任务调度到前台,重新调用此实例