Android 名词说明

翻译自:OReilly - Learning Android

Activity

activity通常是指同一时间,用户在设备上看到的单一的屏幕显示的内容。一个应用包含多个activity,用户的所有操作就是在这几个activity之间不断的切换。

它类似于网站的多个网页。对比Android的应用,一个网站包含一个主页,而android应用则包含一个主“activity”,通常就是我们打开应用显示的第一屏。而就像在网站的首页提供多个页面的导航菜单一样,andoird的应用也应该包含这个功能。

Activity生命周期

开启状态
当一个activity不存在与内存中, 这是开启状态。 当activity正在被开启的时候, 它将要通过一系列的回调方法来实例化。 然后,这个activity将进入运行状态。
注:在程序运行期间,从开启状态到运行状态的过度是最消耗资源的操作, 并且会直接影响电池的寿命。这也是为什么系统不自动摧毁没有再显示的activity。用户可能想要返回到这些activity,所以我们会保存他们在内存中一段时间。

运行状态
运行状态意味着activity当前运行在屏幕上,并且直接影响用户。也可以说这个activity处于激活状态, 用户的所有交互操作, 例如输入,触屏和点击按钮都会被这个activity处理。所以,在同一时间只有一个运行着的activity。
运行着的activity有优先获取内存和资源的权限。因为Android需要处于运行状态的activity处于活跃状态,并且及时响应给用户。

已暂停状态
当activity处于非激活状态(也就是不影响用户行为),但仍存在与屏幕中,我们称之为已暂停状态。这不是一个典型的设计方案,因为设备的屏幕通常很小,并且一个activity或者占据整个屏幕,或者不占据一点空间。我们经常遇到这种情况,一个对话框在一个activity前边弹出,引发activity暂停。所有的activity通过已暂停状态转变为已停止状态。
但是由于他们是可见的,并且不能被移除屏幕,所以始终能够优先获取内存以及其他资源的。

已停止状态
当一个activity处于不可见状态,但仍运行在内存中, 我们称之为已停止状态。已停止的activity可能被调回,再次成为运行中的activity。或者,它可能被摧毁并移出内存。
系统会保持activity保持在已停止状态,因为用户可能随时回到这些activity去,并且重启一个已停止的activity的开销远小于从scratch开启一个activity。那是因为系统已加载所有对象到内存里,然后用户可以很轻易的将其调到前台。
已停止的的activity可以随时被移除内存。

已摧毁状态
一个已摧毁的activity是不存在于内存中的。这个activity管理器决定这个activity是否不再需要,并且可以被移除。在activity被移除之前,它可以执行一些必须操作,例如保存未保存的信息。然而,在activity被摧毁前,不能保证其会先被停止。 一个暂停的activity也是可以被摧毁的。因此,在已暂停的状态做这些例如保存未保存的数据等重要的工作,比在已摧毁状态的时候做要好。

注:事实上,一个activity处于运行状态并不意味着它做了很多事情。它可能只是处于监听状态,等待用户的输入。同样,一个处于已停止状态的activity不是非要什么都没做。状态的命名通常是指这个activity是否积极的在等待用户的输入,换句话说,状态主要是指一个activity是否可见,是否处于激活状态。

Intent 消息体
用于在不同activity之间的,指令传递调用, 分为显式和隐式两种方式, 显式为直接指明要调用的组件,隐式为声明类型,用户及系统来决定需要调用的组件。比如,打开浏览器,我们是指定打开傲游浏览器,还是只声明打开浏览器,让系统帮我们选择。

 

Services 服务

运行于后台,没有任何界面元素,功能和activity类似,但是不关心是否显示在屏幕中。例如,我们看电子书的时候运行在后台的背景音乐。

注: 区别于linux的services,android 的services是调用了linux本身的services,serves和deamons而产生的功能。

services的生命周期较为简单,只有开始,运行和摧毁。因此作为开发人员,更应该关心我们自己创建的服务,不让其浪费过多的系统资源,例如CPU、电量等。

注:服务运行在后台并不意味着它运行在独立的线程。但是如果一个服务当前执行的任务需要更多的时间来完成,那么我们应当让其在独立的线程运行。而如此操作则会引起用户当前的线程运行相对较慢。另外,services和activity运行在同一个应用主线程,这个线程通常被称之为UI线程。

 

Content Providers 内容提供者

Content Providers是应用间分享数据的接口。通常,为了让给应用的数据分隔于其他应用,android让每个应用运行在自己在沙盒内,先对独立。小数据包通过intent在应用间传递,而Content Providers更适合传递更大的、持久话的数据包。Content Providers的API很好的支持CRUD,使应用可以通过它来分享数据。例如Contacts Provider(联系人提供者)作为一个Content Providers,为每个应用提供用户的所有联系人数据。Settings Provider(设定信息提供者)为应用提供所有的系统设定信息,以及应用自身的设定信息。Media Store(媒体商店)提供存储和分享多媒体数据,如照片、音乐等。

 

BroadCast Receives 广播接收器

BroadCast Receives是系统级发布/订阅机制的实现。准确的说,是观察者模式的实现。已订阅的接收者是一些静止的代码,当事件发生时,他们会马上被激活。

系统自身一直在广播事件。例如,一个SMS消息送达,一个电话进来,电池低电,或者系统启动等等,所有这些事件都会被系统广播,而且很多接收者将要被触发激活。

 

Application Context  应用内容

所有的activities, services, content providers, 和 broadcast receivers加起来组成一个应用. 他们运行在同一个Application Context中。Application Context为应用提供了运行环境,而包含相应组件的进程运行在其上。它允许应用在各个组件之间分享数据和资源。

在应用的第一个组件开启的时候,Application Context就被创建了,一直持续到应用被销毁。我们可以通过Context.getApplicationContext() or Activity.getApplication()来获取一个引用。

注: Activities和Services是Context的子类。

 

posted @ 2012-01-16 17:18  Lullaby Us  阅读(219)  评论(0编辑  收藏  举报