1.Activity的生命周期
1.1 生命周期回调方法
onCreate(): activity正在被创建。一般做一些初始化工作,例如加载布局资源、数据初始化
onRestart():activity正在被重启。一般是用户行为导致,比如用户按Home键回到桌面,再次回到activity时,
当前activity走onRestart()—>onStart()—>onResume()
onStart():activity正在启动,activity可见,未出现在前台,可以理解为activity已经显示出来了,但用户看不见,不能进行交互
onResume():activity可见并出现在前台可以进行交互
onPause():activity正在停止
onStop():activity即将停止
onDestroy():activity即将销毁,可做一些回收工作,资源释放
1.2 activity正常的一生
onCreate()->onStart()->onResume()->onPause()->onDestroy()
1.3 activity创建及切换时的生命周期
当aActivity第一次启动时的生命周期:onCreate()->onStart()-onResume()
当aActivity跳转到bActivity时的生命周期
aActivity经历了:onPause()->onStop()
当aActivity走onPause()时,bActivity会先走onCreate()->onStart()-onResume(),然后才是aActivity走onStop()
2.Activity的启动模式
standard:默认的启动模式,每次启动一个activity都会创建activity实例,不管这个activity实例是否存在
singleTop:栈顶复用模式,如果新的activity实例位于栈顶,就不会创建新的实例,如果不是位于栈顶还是会创建实例
singleTask:站内复用模式,如果新的activity实例存在于栈内,就不会创建新的实例
singleInstance:单实例模式,当前activity只能单独存在一个任务栈中,并且具有singleTask的全部性质
3.Activity的启动流程
3.1 点击桌面App图标,Launcher进程采用Binder IPC向system_server的AMS发起startActivity请求
3.2 system_server收到请求后,采用Socket IPC向Zygote进程发送创建进程的请求,Zygote进程fork出新的子进程,即APP进程
3.3 App进程启动后初始化ActivityThread,然后通过Binder IPC向system_server的AMS发起attachApplication请求
3.4 system_server收到请求后,进行一系列准备工作后,向app进程发送scheduleLaunchActivity请求
3.5 app进程收到请求后,通过handler向主线程发送LAUCH_ACTIVITY消息,主线程收到消息后通过反射机制创建Activity,并回调Activity的onCreate()方法
3.6 至此APP便正式启动,开始进入activity生命周期