3.1 应用程序基本组成
Android系统没有使用常见的应用程序入口点的方法(例如main()方法),应用程序是由组件组成的,组件可以调用相互独立的基本功能模块,根据完成的功能不同,Android划分了四类核心组件,即Activity、Service、BroadcastReceiver和ContentProvider,各组件之间的消息传递通过Intent完成。
3.1.1 Activity
Activity是Android应用程序核心组件中最基本的一种,是用户和应用程序交互的窗口。在Android应用程序中,一个activity通常对应一个单独的视图。一个Android应用程序是由一个或多个Activity组成的,这些Activity相当于Web应用程序中的网页,用于显示信息,并且相互之间可以进行跳转。和网页跳转不同的是,Activity之间的跳转可以有返回值。
当新打开一个视图时,之前的那个视图会被置为暂停状态,并且压入历史堆栈中,用户可以通过回退操作返回到以前打开过的视图。Activity是由Android系统进行维护的,它有自己的生命周期,即“产生、运行、销毁”,但是这过程中会调用许多方法,如创建onCreate()、激活onStart()、恢复onResume()、暂停onPause()、停止onStop()、销毁onDestroy()和重启onRestart()等。
3.1.2 Service
Service是一种类似于Activity但是没有视图的程序,它没有用户界面,可以在后台运行很长的时间,相当于操作系统中的一个服务。Android定义了两种类型的Service,即本地Service和远程Service。本地Service是只能由承载该Service的应用程序访问的组件,而远程Service是供在设备上运行的其他应用程序远程访问的Service。
通过Context.startService(Intent service)可以启动一个Service,通过Context.bindService()可以绑定一个Service。
3.1.3 BroadcastReceiver
BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和其他应用程序的广播,并作出回应。在Android系统中,当有特定事件发生时就会产生相应的广播。广播体现在方方面面,例如,当开机过程完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度等。
BroadcastReceiver不能生成UI,通过NotificationManager来通知用户有事件发生,对于用户来说是隐式的。BroadcastReceiver的注册方式有两种,一种是可以在AndroidManifest.xml中进行静态注册,另一种可以在运行时的代码中使用Context.registerReceiver()进行动态注册。只要注册了BroadcastReceiver,即使对应的事件广播来临时应用程序并未启动,系统也会自动启动该应用程序对事件进行处理。另外,用户还可以通过Context.sendBroadcast()将自己的Intent对象广播给其他的应用程序。
3.1.4 ContentProvider
文件、数据库等数据在Android系统内是私有的,仅允许被特定应用程序直接使用。在两个程序之间数据的交换或共享由ContentProvider实现。
ContentProvider类实现了一组标准方法的接口,从而能够让其他的应用保存或读取ContentProvider提供的各种数据类型。
3.1.5 Intent
Intent并不是Android应用程序四大核心组件之一,但是其重要性无可替代,因此在这里我们做一下简单介绍。
Android应用程序核心组件中的三大核心组件——Activity、Service、BroadcastReceiver,通过消息机制被启动激活,而所使用的消息就是Intent。Intent是对即将要进行的操作的抽象描述,承担了Android应用程序三大核心组件相互之间的通信功能。