写在前面:学习安卓很长一段时间了,以前没有写博文的习惯,都是将笔记写在word上面,一次电脑坏了,没有备份到云端,有种想哭的冲动,所以将他写在简书上面,温故而知新,也可以防止丢失!!!
activity被称之为活动(界面),是app中直接与用户交互,运行在主线程
一:activity的生命周期:
(1)正常时候的生命周期:
1.启动activity:onCreate->onStart->onResume activity进入运行状态
2.结束activity:onPause->onStop->onDestory activity退出
3.当前activity被其他activity覆盖在上面或锁屏:系统会调用onPause方法,暂停当前activity的执行
4.当前activity由被覆盖状态回到前台或者解锁屏:系统会调用onResume方法,再次进入运行状态
5.当前activity转到新的activity界面或按home键回到主屏,自身退居后台:onPause->onStop,进入停滞状态(最小化)
6.用户后退到此activity:onRestart->onStart->onResume,进入运行状态(最大化)
7.当处于2和4的状态,系统内存不足的时候,会杀死当前activity,用户后退到当前activity的时候:onCreate->onStart->onResume,进入运行状态
(2)异常时候的生命周期
横竖屏切换的时候的生命周期:onSaveInstanceState(保存一些临时数据)->onPause->onStop->onDestory->onCreate->onStart->onRestoreInstanceState(恢复一些临时数据)->onResume
众所周知在横竖屏切换的时候,activity会重新走一遍onCreate方法,比如格斗游戏,当重新走onCreate方法的时候,角色会满血复活,这样显然是不行的,那么我们一般会怎样解决呢?,一般情况我们都会在androidmanifest.xmll中的activit元素加入这个属性 Android:configChanges="orientation|keyboardHidden" 即可,设置屏幕朝向不敏感
二:activity的四种启动模式
activity的启动模式有四种:
standard
默认的启动模式,开启一个activity,系统会创建这个activity的实例对象,将其放在应用程序任务栈的栈顶,也就是说,每次启动一个activity,新的activity会叠加在旧的activity上面,按返回键退出的时候,按照先进后出的原则依次退栈。
singleTask
单一任务模式,开启一个activity,系统会去应用程序的任务栈中查找有没有这个activity的实例对象,如果有,就会将这个activity之前的所有activity的实例对象,使其置于任务栈的栈顶,如果没有,系统会在栈顶创建这个activity的实例对象
singleTop
单一顶部模式,开启一个activity,系统会去应用程序的任务栈的栈顶查找有没有这个activity的实例对象,如果有,就复用栈顶的activity实例对象,如果没有,就在栈顶创建activity的实例对象
singleInstance
单一实例模式,开启一个activity,系统会给这个activity创建一个单独的任务栈,这个任务栈只有这一个activity的实例对象,独一无二。
设置Activity的启动模式,只需要在AndroidManifest.xml里对应的标签设置Android:launchMode属性,例如: