Android应用程序的构成

Android应用程序的目录结构

src目录:存放的是项目的源代码;

gen目录:ADT自动生成的,不需要人为地修改;

assets目录:存放项目相关的资源文件;在程序中可以使用"getResources.getAssets().open("test.txt")"得到资源文件的输入流InputStream对象;

res目录:存放应用程序中经常使用的资源文件,包括图片、声音、布局文件及参数描述文件等,以drawable开头的三个文件夹用于存储.png.9.png .jpg等图片资源;

AndroidManifest.xml文件:应用程序的系统控制文件;

default.properties文件:默认的配置文件。

Android基本组件的介绍:

应用程序的生命周期

前台进程:当前正在前台运行的进程,最重要的进程;除非系统的内存已经到不堪重负的情况,否则系统是不会中止该进程;

可见进程:一般还是显示在屏幕中,但是用户并没有直接与之进行交互,非常重要;除非为了保证前台进程的正常运行,否则Android系统一般是不会将该进程中止的;

服务进程:拥有Service的进程,该进程一般是在后台为用户服务的;一般情况下,Android系统是不会将其中断的,除非系统的内存已经达到崩溃的边缘,必须通过释放该进程才能保证前台进程的正常运行,才可能将其中止;

后台进程:一般对用户作用不大,缺少该进程并不会影响用户对系统的体验;如果系统需要中止某个进程才能保证系统正常运行,那么会有非常大的几率将该进程中止;

空进程:对用户没有任何作用的进程,该进程一般是为缓存机制服务的,当系统需要中止某个进程以保证系统的正常服务时,会首先将该进程中止。

Activity的七个生命周期

onCreateonStartonResumeonPauseonStoponDestroyonRestart

Service是一个具有较长的生命周期但是没有用户界面的程序,一般由Activity启动,但是并不依赖于Activity,即当Activity的生命周期结束时,Service仍然会继续运行,直到自己的生命周期结束为止。Service的启动方式有两种:startServicebindService

BroadcastReceiver为用户接收广播通知的组件,当系统或某个应用程序发送广播时,可以使用BroadcastReceiver组件来接收广播消息并做相应处理。发送广播的三个方法:Context.sendBroadcast()sendOrderedBroadcast()sendStickyBroadcast()

ContentProvider用来实现应用程序之间数据共享的类。当需要进行数据共享时,一般利用Content Provider为需要共享的数据定义一个URI,然后其他应用程序通过Context获得ContentResolver并将数据URI传入即可。访问共享资源时,需要为应用程序添加适当的权限。

IntentIntentFilter

Intent是一种运行时的绑定机制,在应用程序运行时连接两个不同的组件。一般的应用是通过IntentAndroid系统发出某种请求,然后Android系统会根据请求查询各个组件声明的IntentFilter,找到需要的组件并运行它。

ActivityServiceBroadcastReceive组件之间的通信全部使用的是Intent,但是各个组件使用的Intent机制不同。

(1)Activity组件:激活一个Activity组件时,需要调用Context.startActivity()Context.startActivityForResult()方法来传递Intent

(2)Service组件:启动或绑定Service组件时,会通过Context.startService()
Context.bindService()实现Intent的传递;

(3)BroadcastReceive组件:一般通过Context.sendBroadcast()sendOrderedBroadcast()sendStickyBroadcast()方法传递的,当BroadcastIntent被广播后,所有IntentFilter过滤条件满足的组件都将被激活。

Intent是由组件名称、ActionDataCategoryExtraFlag六部分组成。

1)组件名称:实际上就是一个ComponentName对象,用于标识唯一的应用程序组件;

2Action:实际上是一个描述了Intent所触发动作名称的字符串,已经定义好很多字符串常量来表示不同的Action,也可以自定义Action

系统定义的常见Action

Action_CALL:拨打Data里面封装的电话号码;

Action_EDIT:打开Data里指定数据所对应的编辑程序;

Action_VIEW:打开能够显示Data中封装的数据的应用程序;

Action_MAIN:声明程序的入口,该Action并不会接收任何数据,同时结束后也不会返回任何数据;

Action_BOOT_COMPLETEDBroadcastReceive Action的常量,表示系统启动完毕;

Action_TIME_CHANGEDBroadcastReceive Action的常量,表示系统时间通过设置而改变。

3Data:主要是对Intent消息中数据的封装,主要描述Intent的动作所操作到的数据的URI及类型。不同类型的Action会有不同的Data封装,例如打电话的Intent会封装tel://格式的电话URI,而ACTION_VIEWIntentData则会封装http://格式的URI

4Category:是对目标组件类别信息的描述。与Category相关的方法有三个:addCategory添加一个CategoryremoveCategory删除一个CategorygetCategory得到一个CategoryAndroid系统定义了一组静态字符常量来表示Intent的不同类型。

系统定义的常见Category

CATEGORY_GADGET:表示目标Activity是可以嵌入到其他Activity中的;

CATEGORY_HOME:表示目标ActivityHOME Activity

CATEGORY_TAB:表示目标ActivityTabActivity的一个标签下Activity

CATEGORY_LAUNCHER:表示目标Activity和应用程序中最先被执行的Activity

CATEGORY_PREFERNCE:表示目标Activity是一个偏好设置的Activity

(5)Extra:封装了一些额外的附加信息,这些信息是以键值对的形式存在的。Intent可以通过putExtras()getExtras()方法来存储和获取Extra。在Android系统的Intent类中,定义了常见的Extra键值。

 系统定义的常见Extra

 EXTRA_BCC:装有邮件密送地址的字符串数组;

 EXTRA_EMAIL:装有邮件发送地址的字符串数组;

 EXTRA_UID:使用ACTION_UID_REMOVED动作时,描述删除用户的id

 EXTRA_TEXT:当使用ACTION_SEND动作时,描述要发送文本的信息。

IntentFilter实际上相当于Intent的过滤器,一个应用程序开发完成后,需要告诉Android系统自己能够处理哪些隐性的Intent请求,这就需要说明IntentFilter

IntentFilter过滤Intent时,一般是通过ActionDataCategory三方面进行检测的。

猜你喜欢

转载自daniel-tu.iteye.com/blog/1836903