Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814590
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 嵌入式

2012-03-25 20:51:58

Android应用程序都是由Java编写的。每个Android程序都拥有独立的Linux进程,每个进程也都有它们自己的VM,所以各个Android程序之间是互不影响的。每个应用程序都会被分配一个Linux的用户ID,这个程序的文件只能被具有该ID的程序访问。不同的程序可以被分配一个相同的用户ID,这样做的原因是它们可以互相访问对方的文件、节省系统资源以及在同一个Linux进程中运行从而共享同一个VM。

Andorid程序由四种类型的组件(building block)组成:Activity、Service、Broadcast receivers和Content Provider。


Activity类似于桌面系统的win form,通过一个Visual UI和用户交互。在代码中通过继承一个名叫Activity的类来创建一个Activity。Activity.setContentView可以设置程序的UI。Activity同样可以启动别的Activity,就像桌面程序中一个dialog可以启动别的dialog。


Service是运行在后台的服务程序,不需要与用户交互,比如一个音乐播放器。在代码中继承基类Service来创建。


Boadcast receivers(需继承BroadcastReceiver类)专门用来接收来自别处的广播通知,比如来自系统的通知“电池电力不足”或“语言改变”。应用程序也可以通过NotificaitonManager类来发送广播。
Content provider(需继承ContentProvider类)用来定义一种数据类型,使得其它程序可以操作这类数据。比如程序定义一个“短消息”数据,这样别的程序就可以处理“短消息”。这样的数据可以存成文件格式或存入SQLite数据库中。

Android是一个基于消息的平台。各类程序在安装时都向系统进行注册,表明它们能处理什么样的请求。当一个请求发生时,系统查询所有注册过该请求的程序,把它们罗列出来,由用户选择其中之一。比如:用户运行了一个邮件程序,某封邮件里有个png格式的附件,用户试图打开这个附件,但邮件程序本身并不知道该怎么打开这样的文件,于是它直接向系统请求:“我要一个程序来打开一个png文件,至于谁来打开我不管。”系统接受了这个请求,找到了三个能打开png的程序,于是把它们用列表方式显示给用户,用户选择一个程序,png文件就被打开了。当png文件关闭后,邮件程序又接着运行。


Intent对象就是在各程序之间传递的消息。它包含了消息的标识符,以及需要处理的数据的URI。调用方法startAcitvity(Intent)可以执行另一个Activity程序,如果要获得返回值,则调用startActivityResult(Intent)方法。调用startService(Intent)启动一个新的Service,通过bindService(Intent)可以绑定当前正在运行的service,如果没有运行着的处理此Intent的server就start一个新的serice。调用sendBroadcast(Intern)可以发送一个广播。


各组件的生命周期


Activity:用户点击菜单或别的程序调用startActivity方法,可以启动一个Activity。启动后,Activity的onCreate方法和onStart方法依次被调用,之后便处于运行状态。当被的程序开始运行时,比如上例中的打开一个附件或突然有个电话打入,当前运行的程序就会进入pause状态stop状态pause状态时Activity的界面仍(部份)可见,但不能和用户交互(没有focus)。比如用户在文件管理程序中试着删除一个文件时,一个小的提示框“是否删除文件”弹出,文件管理程序仍然可以被看到,但不能响应用户操作。而stop状态时Activity的界面完全不可见。处于这两种状态时,Activity的onPauseonStop会被调用。Pause状态回到运行状态时OnResume会被调用,而stop状态回到运行状态时OnStart会被调用。当内存资源不够时,比如一个摄像程序启动,需要大量内存,系统会把一些处于stop和pause的程序从内存中清除。当被清除的Activity从pause或stop切换回来时,需要重新创建(OnCreateOnStart),所以程序需要进入不活动(Inactive)的状态时需要保存数据以防丢失。Activity可以调用finish方法来结束自己,程序也可以调用finishActivity结束其它Activity。当一个Activity结束时,它的onDestroy方法会被调用,释放所有资源。


ServicestartService启动一个新的服务,Service的onCreateonStart方法被调用。stopService可以结束一个服务,此时Service的onDestroy方法会被调用。如果使用BindService来绑定一个服务时,onCreateonBind会被依次调用,之后通过unBindService取消绑定会调用Service的onUnbind方法,如果一个Service在unbind后,还有客户bind到这个服务的话,它的onRebind会被调用。


Broadcast receiver:它的周期比较简单,当广播到达时,一个新的对象被创建,onReceive被调用。当onReceive方法结束后,这个对象就被摧毁。值得注意的是系统只给onRecieve方法5秒钟的时间,如果超过这个时间,系统就会把它当成“没响应”,提示用户并强行关闭它。

阅读(1156) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~