Activity简介
activity形态:
activity一个最大的特点就是拥有多种形态,以形态之间的切换来控制自己的生命周期。
1,Active/Running
这时候,Activity处于任务栈的栈顶,可见,并可与用户进行交互。
2,Paused
当Activity失去焦点,被一个新非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转化成Paused形态。但它只 是失去了与用户交互的能力,所有状态信息,成员变量都换保存着,只有在系统内存极地的情况下,才会被系统回收掉。(注:此时的Activity是在Back返回栈中,如果点击返回键可以在onResume()方法中修改所有状态信息以及成员变量等等 )
3,stopped
如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped形态,此时。它不在可见,但却依然保持了所有状态信息和成员变量。
4,KIlled
当Activity被系统回收掉或者Activity
activity周期:
activity的生命周期最主要的是3个状态,他们最稳定,其他状态都是过度状态,很快就会结束。
Resumed:
这个状态就是前面说的Active/Running形态,此时,Activity处于栈顶,处理用户的交互。
Paused:
当Activity的一部分被挡住的时候进入这个状态,这个状态Activity失去焦点,不会接受用户输入。
Stopped:
当Activity完全被覆盖时进入这个状态,此时Activity不可见,仅在后台运行。
Activity启动与销毁过程:
启动:oncreate(),onStart(),onResume()进入Resumed状态
销毁:系统调用ondestory()使其进入killed状态
注:这个过程中oncreate()创建基本的UI元素,onPause()与onStop()清除Activity的资源,避免浪费。onDestory()中、
因为引用会在Activity销毁的时候销毁,而线程不会,所以清除开启的线程。
Activity的暂停与恢复过程:
当栈顶的Activity部分不可见后,就会导致Activity进入pause形态,此时就会调用onPause()方法,当结束阻塞后、就
会调用onResume()方法来恢复到Resume形态。
注:这个过程中、onPause()释放资源,如Camera、sensor、receivers,而onResume()需要重新初始化在onPause()中释放
的资源。
Activity的停止过程:
当栈顶的Activity部分不可见的时候,实际上后续有两种可能,从部分不可见到可见是恢复过程,调用的是onResume()、
从部分可见到不可见是停止过程。系统在当前不可见的时候总会调用onPause()方法,当重新回到前台的时候就会调用onStart()
方法。
Activity的重新创建过程:
如果你的系统长时间处于stopped形态而且此时系统需要更多内存或者系统内存极为紧张时,系统就会回收你的Activity,而此时 系统为了补偿你,会将Activity状态通过onSaveInstanceState()方法保存到bundle对象中,当然你也可以增加键值对存入Bundle对象 以保存这些状态。当你重新创建这些Activity的时候,保存的Bundle对象就会传递到Activity的onRestoreInstanceState()方法与 Oncreate()方法中,这也就是Oncreate()方法中的参数-------Bundle savedInstanceState的来源。
AndroidMainifest启动方式
standard:
这种启动方式每次都会创建新的实例,每次点击standard模式创建Activity后,都会创建新的MainActivity覆盖在原Activity上。
singleTop:
这种模式启动时,系统首先判断当前栈顶Activity是否是要启动的Activity,如果是则不创建新的Activity而直接引用;如果不是则 创建新的Activity。此模式通常适用于接收到消息后显示的界面,例如QQ接收到消息弹出Activity。
这种启动模式虽然不回创建新的实例,但是系统任然会Activity启动时调用onNewIntent()方法。
singleTask:
singleTask与singleTop类似。只不过这次是检测整个栈中是否有启动的Activity,如果存在则将该Activity置于栈顶,并将此 Activity以上的Activity全部销毁。不过这里指的是在同一个App中启动这个singleTask的Activity,如果是其他程序以singleTask模式 来 启动这个Activity,那么它将创建一个新的任务栈。不过这里有一点需要注意的是,如果启动模式为singleTask的Activity已经在后 台一个任务栈中了,那么启动后后台的这个任务战将一起被切换到前台。
注:使用这个模式创建的Activity不是在新的任务栈中被打开,就是讲已打开的Activity切换到前台,所以这种模式通常可以用来退出 整个应用:将Activity设为singleTask模式,然后再要退出的Activity中转到注Activity,从而将主Activity之上的Activity都清除,然后 重写Activity的onNewIntent()方法,在方法中加上一句finish(),将最后一个Activity结束掉。
singleInstance:
singleInstance此启动模式和使用的浏览器工作原理类似,在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览 器,否则会在当前打开的浏览器中访问。申明为singleInstance的Activity会出现在一个新的任务栈中,而且该任务栈中只存在这一个 Activity 。
注:如果应用中A的任务栈中创建了MainActivity实例,且启动模式是singleInstance,如果应用B也要激活MainActivity,则不需要创建,两个应用共享该Activity实例。这种模式常用与需要与程序分离的界面.eg:SetupWizard调用的紧急呼叫