1.Activity
Android里的四大组件之一,可称为界面活动,即用户与app的交互接口。(但是非唯一,用户还可见window,dialog与Toast)
2.状态
Active:正在运行状态,且获取了焦点,处于顶层,用户可见;
Paused:暂停状态,失去焦点,不处于顶层,但是用户仍可见,内存里面的成员变量,状态信息等仍然存在。如在Activity上弹现一个dialog;
Stopped:停止状态,此时用户已不可见,但是内存里的成员变量,状态信息等仍旧存在。场景比如:跳转到新的Activity,旧的Activity处于的状态;
Killed:已经被销毁的Activity才处于killed状态,它的内存里面的成员变量,状态信息等都会被一并回收。
3.生命周期
onCreat:Activity正被创建,如果走OnReStoreInstanceState,则这里拿到的intent就是其对应存储的intent。此方法一般用于setContentView去家在指定布局资源,初始化数据等;
OnRestart:从新的Aty或者应用跳转,再back回来,就会执行,其执行时机在onStart之前,本身Aty从不可见到可见状态;
OnStart:Aty正在被启动,即将开始,本身Aty(仍旧在后台)已经"可见",但是还未显示给用户,即用户还不可交互;
OnResume:Aty已经可见,且出现在前台可与用户交互了;
OnPause:Aty正在停止,可做一些数据回收与动画停止,不可做耗时操作;
OnStop:Aty即将停止,可做一些稍微重量级一点的工作,但是也不可以太耗时。注意:当本身Aty采用了透明主题,Aty跳转或者切换到桌面时候,不走该方法;
OnDestory:Aty即将销毁,生命周期中最后一个回调,常用做一些回收工作和最终资源释放;
常见场景:
Activity启动–>onCreate()–>onStart()–>onResume()
点击home键回到桌面–>onPause()–>onStop()
再次回到原Activity时–>onRestart()–>onStart()–>onResume()
退出当前Activity时–>onPause()–>onStop()–>onDestroy()
一些特殊情况下的生命周期:
Aty横竖屏切换(android:configChanges属性有影响)、什么时候Activity单独走onPause()不走onStop()、什么时候导致Activity的onDestory()不执行等
生命周期对应活动场景解释,详见参考博文
4.启动方式与优先级
Activity的启动由Intent出发,Intent又分成显式Intent与隐式Intent,显式则是明确指向某个Activity,隐式则指向一个或者多个目标activity(当然也可能没有符合的Activity可以处理这个隐式Intent)
Activity的优先级:
优先级最高: 与用户正在进行交互的Activity,即前台Activity。
优先级中等:可见但非前台的Activity,比如:一个弹出对话框的Activity,可见但是非前台运行。
优先级最低:完全存在与后台的Activity,比如:执行了onStop。
同时,如果一个进程中没有四大组件的执行,那么这个进程将很快被系统杀死,因此,一些后台工作不适合脱离四大组件独立运行在后台中,这样进程更容易被杀死。比较好的方法就是将后台工作放入Service中从而保证进程有一定的优先级,这样就不会轻易地被系统杀死。
进程的优先级
前台>可见>服务>后台>空
前台:与当前用户正在交互的Activity所在的进程。
可见:Activity可见但是没有在前台所在的进程。
服务:Activity在后台开启了Service服务所在的进程。
后台:Activity完全处于后台所在的进程。
空:没有任何Activity存在的进程,优先级也是最低的。
5.任务栈与启动模式
任务栈:是Android中用于存储活动(Activity)实例的一种数据结构,Aty的跳转与回调等都与这个栈有关;
启动模式:Activity具有四种启动模式,包括standard(默认)、singleTop、singleTask、singleInstance;
standard(默认):每次启动一个Activity都会创建一个新的实例,无论它是否已经存在。因此同一个任务栈里可以有多个实例。注意:如果采用非Activity类型的Context(如ApplicationContext)启动该模式的Activity会报错,因为这种Context并没有任务栈;
singleTop:栈顶复用模式,当该模式下的Activity处于栈顶,则不会重建,否则就进行重建。注意,当不重建时候,Activity会调用OnNewIntent方法,不会调用OnCreat与OnStart;
singleTask:栈内复用模式,一种单实例模式。该模式的Activity启动,会现寻找其所要的任务栈,如果没有创栈且创建Activity放入。如果有符合的栈但是没有实例,创建Activity实例放入该栈栈顶。当存在符合栈且栈内具有该Activity实例,则清除栈中该Activity上面的所有实例(Activity),切换到栈顶后调用OnNewIntent,不会调用OnCreat与OnStart;
singleInstance:单实例模式,强化版singleTask模式,具有其所有特性。其实例只能单独地位于一个栈中,启动它则要创建一个新的任务栈。
6.通信方式
Activity组件之间的:[1]Intent/Bundle [2]类静态变量 [3]全局变量
Activity->Service:[1]绑定服务的方式,利用ServiceConnection这个接口 [2]Intent [3]CallBack + Handler,监听服务的进程变化
Activity->Fragment:[1]Bundle [2]直接进行方法调用
---------------------
参考书籍:《Android开发艺术探索》
参考博文:
作者:ClAndEllen 来源:CSDN 题目:Android知识体系总结之Android部分Activity篇
链接:https://blog.csdn.net/clandellen/article/details/79257489
---------------------