一、Activity
activity在应用是一个界面,它加载布局文件显示各种UI元素。并且各个Activity可以相互跳转。
1、Activity生命周期
oncreate:在activity第一次被创建时候调用,在此完成Activity的初始化操作(设置布局,初始化视图,绑定事件)
onStart:在onCreate之后调用,此时处于不可见状态。
onResume:在activity变为可见时调用。执行完onresume之后,Activity就会请求AMS渲染它所管理的视图。此时的Activity一定位于返回栈的栈顶,并处于运行状态。
onPause:Activity从可见到不可见时调用。通常将一些耗时CpU操作释放掉,以及保存一些关键数据。
onStop:Activity在完全不可见时调用。它与onPause函数主要区别在于,如果新启动的Activity是一个对话框的Activity,那么onPause函数会得到执行,而onStop函数不执行。
onsDestroy:在销毁之前调用,之后为销毁状态。
onRestart:Activity被重新启动时调用,也就是由停止状态变为运行状态之前调用。
2、Activity的构成
Activity之下有一个PhoneWindow,这个PhoneWindow是window的实现类,然后window之下包含一个DecorView,DecorView实际上是页面的顶级视图,它从一些系统布局中加载。并且在运行时将开发人员设置给Activity的布局资源添加到系统布局的mContentParent中。这样用户布局就被添加到系统布局中。
DecorView 包含三部分(actionbar、标题栏区域、开发者设置的布局区域)
3、Activity的4种启动模式(standard,singleTop,singleTask,singleInstance)
每个应用程序都是由一个或者多个Activity组成。android内部使用通过回退栈来管理activity实例。对于android来说,当前显示的Activity就在栈顶,当点击后退键或者点击应用上返回按钮,系统会将栈顶Activity出栈,此时下一个Activity就会变为栈顶显示到设备。
一些特殊情况我们可能需要对activity实例做一些处理,例如,为了避免重复创建Activity,我们要求一个activity只有一个实例。
(1)standard(标准启动模式)
默认启动模式。可被多次实例化
(2)singleTop
只有activity在栈顶时,才不重新创建,并且调用原来activity的onIntent函数,其他与standard一样
(3)singleTask
此启动模式,任务栈中只能有一个改activity的实例。
如果任务栈中还没有该activity,创建一个实例放在栈顶。
如果已经存在,系统会销毁处在该activity 上的所有activity,最终让该activity 处于栈顶,同时回调onnewIntent()函数。
(4)singleInstance
此模式的activity会在一个独立的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务栈中。当再次启动该Activity实例时,会重用已存在的任务和实例。并且会调用该实例的onNewIntent函数。
和singleTask不同的是,同一时刻在系统中只会存在一个这样实例,而singleTask模式的activity是可以有多个实例的,只要这些activity在不同的任务栈中即可。