概述
Android四大核心组件指的是Activity,Service,ContentProvider,BroadCastReceiver,核心组件都是由Android系统进行管理和维护的,一般都要在清单文件中进行注册或者在代码中动态注册。
Activity
- 定义与作用: Activity的中文意思是活动,代表手机屏幕的一屏,或是平板电脑中的一个窗口,提供了和用户交互的可视化界面。Activity是用于处理UI相关业务的,比如加载界面、监听用户操作事件。
生命周期: 生命周期指的是Activity从创建到销毁所执行的一系列方法,主要包括7个生命周期方法。详细流程如下图
里面涉及了Activity的四个重要状态,如下表
注:以上两个图表皆摘自《Android从入门到精通》。- 创建与配置 创建一个Activity需继承自android.app.Activity这个类,然后重写onCreate(),在onCreate()里面调用setContentView(参数)来加载布局,参数就是布局文件。
配置则需要在清单文件的Application节点下面注册Actvitiy,如果要首先启动该Activity则添加带有category节点且值为LAUNCHER的intent-filter节点,下面就是清单文件的配置。
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
4 . 启动模式
Activity的启动模式决定了激活Activity时,是否创建新的对象,进而将影响到任务栈也叫回退栈。
在AndroidManifest.xml文件中,可以为每个activity节点配置android:launchMode属性,以决定该Activity的启动模式,该属性的值有:
—–standard:(默认值)标准模式:每次激活Activity时,都会创建新的Activity对象
—–singleTop:栈顶时唯一,即当Activity处于栈顶位置时,每次激活并不会创建新的Activity对象。但不在栈顶时,每次激活时会创建新的对象。
—–singleTask:任务栈中唯一,即当栈中没有该Activity时,将创建该Activity对象,当栈中已经有该Activity时,将不会创建新的对象,原本栈中位于该Activity之上的其它Activity将全部被强制出栈,且被激活的Activity将自动获得栈顶位置。
—–singleInstance:实例(对象)唯一,确保该Activity的对象一定只有1个,被设置为singleInstance的Activity将被置于一个专门的任务栈中,且该任务栈中有且仅有一个Activity。
什么是任务栈(回退栈):
任务栈是用来存放所有激活了的Activity对象,激活的Acitvity将会按照后进先出的栈结构显示出来。因为屏幕只能显示一个Activity,当有新的Activity被激活时,原来正在显示的Activity就会进行压栈操作被压到新Activity对象下方的位置。当按下”Back”键时栈顶Activity会执行弹栈操作,而在第2位的Activity将获得栈顶位置,显示在前台。
service
- 定义与作用
— Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。另外,一个组件能够绑定到一个service与之交互(IPC机制),例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行,以上是Google文档的解释,资料来源于大神博客
— Service还有一个作用就是提升进程(每个应用都是一个进程)的优先级,进程的优先级指的是在Android系统中,会把正在运行的应用确定一个优先级,当内存空间不足时,系统会根据进程的优先级清理掉一部分进程占用的内存空间,以获得足够的内存空间以供新启用的应用运行。详细的进程优先级划分如下,
1)前台进程:应用程序存在Activity正位于前台,可见并可控
2)可见进程:应用程序存在Activity处于局部可见状态,即局部可见却不可控
3)服务进程:应用程序存在正在运行的Service
4)后台进程:应用程序的所有Activity均被置于后台,没有任何Activity可见
5) 空进程:已经退出的应用程序
service的进程优先级详细介绍请参考这篇博文,点此进入
2 . 状态
1)启动
【启动service】
用Context类定义的startService(Intent)即可启动Service组件,其中intent定义方法与跳转Activity类似,只需把Actvity类换成Service类即可。其生命周期为启动时onCreate()–>onStartCommand()–>销毁时onDestroy(), 反复调用startService()只会导致Service反复执行onStartCommand()
【停止service】
调用Context类定义的stopService(Intent)即可停止Service组件,反复调用并没有任何效果,亦不会报告错误,即:即使停止没有启动的Service也不会出错。也可以在Service类的内部,调用Service定义的stopSelf()方法,停止当前Service。
2)绑定
主要作用是实现组件间的通信,实质的表现是Activity可以调用Service中的方法,使Service执行特定的业务,并且这些方法可以是带返回值的方法,进而Activity可以通过获取这些