Activity的概述
- Activity是Android组件中最基本也是最为常见用的四大组件(Activity活动,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一。
- Activity是“单任务焦点”的,也就是说用户只能与一个active(running)的Activity交互。一个Activity通常就是一个单独的屏幕/界面,负责管理界面上的各种控件(widgets),可以在Activity的onCreate(Bundle savedInstanceState)方法中调用setContentView(int layoutResID) 向其添加视图/控件, layoutResID为在xml中定义的layout,可以通过自动生成的R类访问:R.layout.xxx。
- Activity类的继承关系及实现的主要接口如下图所示,继承自Activity的主要子类有FragmentActivity, ListActivity, NativeActivity, ActivityGroup 等。
- Activity作为与用户的交互界面,需要保持快速响应,一般5秒左右就会提示异常,因此在Activity中不做耗时的操作,如下载上传数据。耗时操作可以使用Service或者使用多线程。
Activity的生命周期
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity

Activity的生命周期的7个方法调用情况图片



Activity生命周期方法的调用(启动,销毁,锁屏,解锁,Home隐藏,Home显示)
- 当A启动B的所执行的方法:
启动A:onCreate()->onStart()->onResume()
A启动B:->onPause() (A),onCreate()(B)->onStart()(B)->onResume()(B) ,onStop()(A)
B返回A:onPause() (B),onRestart()(A)->onStart()(A)->onResume()(A) ,onStop()(B)->onDestory()(B)
A返回桌面:onPause() (A)-->onStop()(A)->onDestory()(A)
当AActivity切换BActivity(此activity是以dialog形式存在的)所执行的方法:
AActivity:onCreate()->onStart()->onResume()->onPause()
BActivity:onCreate()->onStart()->onResume()
- A切换到桌面(Home隐藏):
A:onPause、onStop
桌面再切换到A(Home显示):
A:onRestart、onStart、onResume

Activity几种状态
在Activity的生命周期中,通常有四种状态(运行running,暂停paused,停止stopped,销毁destroyed):
1. Running:在屏幕最前面,界面是可见的、可交互的,运行在堆栈的顶部,执行完onResume()方法之后直到onPause()就是这个状态。
2. Paused:被其他activity部分覆盖的时候,界面可见但失去焦点,不可交互, activity是存活的(保留了所有状态信息),当系统内存很低的时候可能会被直接killed掉。执行完onPause()后直到onStop()就是这个状态。Paused状态的Activity调用onResume方法后可以重新回到活动状态。
3. Stopped:被其他Activity完全覆盖的时候,仍保留了状态信息,界面完全不可见,Stopped状态的Activity通常都会因为需要内存而被系统killed。执行完onStop()方法后直到onDestroy()就是这个状态。Stopped状态的Activity调用onRestart方法可以重新回到活动状态。
4. Destroyed:处于Paused 或Stopped状态的Activity,当系统要求(调用finish()方法)或者被移除killed,Activity则被Destroyed掉,系统可以将其从内存中清除。Destroyed的 Activity表明其已经被销毁,如果需要再使用者需要重新create。
Activity的四种加载模式和任务栈管理
- Activity有四种加载模式,分别为:
1.standard:标准模式(默认模式),一调用startActivity()方法就会产生一个新的实例。
2.singleTop:如果Activity实例位于栈顶,就不产生新的实例,直接使用栈顶的实例,否则,就会产生一个新的实例。
3.singleTask:每次调用都会使用这个实例,不会去产生新的实例了。
4.singleInstance:跟singleTask模式基本上是一样,只有一个区别:在这个模式下的Activity实例与其他Activity处在不同的栈中,此实例所处的Task中只能有这个Activity实例,不能有其他的实例 -
任务栈(Task Stack)或者叫退回栈(Back Stack)介绍:
1.任务栈用来存放用户开启的Activity。
2.在应用程序创建之初,系统会默认分配给其一个任务栈(默认一个),并存储根Activity。
3.同一个Task Stack,只要不在栈顶,就是onStop状态:
onstop状态.jpg
如何设置Activity的加载模式?
加载模式可以在清单文件AndroidManifest.xml中的<activity>的launchMode属性进行配置

网友评论