Android 01--Activity

知识结构图

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

---------------------

你可能感兴趣的:(Android 01--Activity)