随着移动终端的不断发展,尤其是对消费者类型产品而言,用户已经不再满足于基本的功能需求,绚丽的UI和良好的用户体验逐渐成为用户关注的重点。Android在UI方面做了大量的工作,整个应用架构显得非常灵活且易扩展,在提供了丰富组件的基础上,为开发者进行差异化方面的工作提供了强大的支持。
对Android应用程序而言,应用组件主要由Activity、Service、Broadcast Receivers、Intent、Content Providers、AndroidManifest等构成。Activity是与用户直接交互UI组件; Service是运行在后台、用户不可见的服务组件;Broadcast Receivers 是进行系统消息广播的广播组件;Intent是应用组件间、进程间进行通信的通信组件;Content Providers是不同应用间传递、分享数据的内容组件;Android Manifest为应用程序的管理组件。其他组件还有App Widgets、Graphics、Audio and Video、Data Storage、Resources等。
在应用组件中,所有组件都是具有生命周期的,当组件被创建时,开始其生命周期,当组件被销毁时,结束其生命周期。本节将着重介绍Activity、服务、广播接收器、进程的生命周期。
在系统中,Activity由Activity栈即Tasks来管理,Activity在其整个生命周期中,有4个状态:运行(running)、暂停(paused)、停止(stopped)、销毁(Destroyed)。当一个Activity被启动时,该Activity被放置在Tasks的顶部,其状态处于“running”状态。
当一个Activity被置于前台时,该Activity处于“running”状态。
当一个Activity失去焦点但仍然可视时,该Activity处于“paused”状态。在“paused”状态下,如果系统可用内存非常低,该Activity则可能被销毁。
当一个Activity完全不可视时,该Activity处于“stopped”状态。当系统需要更多内存时,该Activity可能被销毁。
当一个Activity因为某种原因被销毁时,该Activity将处于“Destroyed”状态。
图1 显示了Activity的状态迁移过程。
2.服务生命周期
服务通常作为后台进程运行,通过Context.startService()方法可以启动服务,如果需要销毁一个服务,则可以调用Context.stopService()、Service.stopSelf()、Service.stopSelfResult()等方法。
当客户端需要和服务进行绑定来利用服务时,需要调用Context.bindService()方法,结束绑定需要调用Context.unbindService()方法。
图2显示了服务的状态迁移过程。
图2 服务生命周期
3.广播接收器生命周期
广播接收器必须定义的一个回调方法为:
void onReceive(Context curContext, Intent broadcastMsg)
当一个广播消息到达时,Android会调用BroadcastReceiver ::onReceive()方法来处理消息,在处理过程中,广播接收器处于激活状态,当处理结束时,广播接收器处于去活状态。
注册一个广播接收器的方法为Context::registerReceiver(BroadcastReceiver, IntentFilter)。
4.进程生命周期
在Android中,根据进程中运行的组件,以及组件的状态将进程分为5类:前台进程(foreground process)、可视进程(visible process)、服务进程(service process)、后台进程(background process)、空进程(empty process)。在系统运行过程中,如果系统内存不足,Android将会按照进程当前的状态决定哪个进程被杀死。
1)前台进程
当一个进程出现如下场景时,该进程被称为前台进程。场景包括:
正在运行一个与用户交互的Activity。
驻留了一个与用户交互的Activity相绑定的服务。
拥有一个正在执行生命周期调用(onCreate(),onStart()、onDestroy())的服务对象。
拥有一个正在执行onReceive()方法的广播接收器对象。
2)可视进程
当一个进程没有包含任何前台组件,但对用户视觉有影响时,该进程被称为可视进程。这类进程的典型场景包括弹出窗口隐藏的全屏窗口等。另外驻留了与处于“paused”状态的Activity绑定的服务进程也属于这类进程。
3)服务进程
当进程中驻留了一个服务组件时,该进程称为服务进程,除非系统已经没有足够的内存去运行前台进程和可视进程,否则服务进程将一直在系统中保持运行。这类进程的典型场景如Mp3的后台播放。
4)后台进程
当进程的所有Activity对用户而言均不可见时,对用户体验来说没有直接的影响,这些进程称为后台进程。为了满足更重要的进程的资源需求,后台进程可能会被系统杀死。
5)空进程
当一个进程没有驻留任何激活的应用组件时,该进程称为空进程,这类进程仍存在于系统中的原因是,作为缓冲可以提高进程的下次启动时间。但为了保证系统的正常运行,当系统资源濒临不足时,Android常会选择杀死这类进程。
(摘自华清远见系列图书《Android多媒体编程从初学到精通》)
更多华清远见原创教材展:http://www.farsight.com.cn/FarsightBooks/home.html
嵌入式及3G相关资源及学习请点击:嵌入式开发视频 android开发视频 android培训 3G培训 QT培训 QT开发视频 物联网培训 物联网技术视频 嵌入式学习
文章评论(0条评论)
登录后参与讨论