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的七个生命周期:
onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart。
Service:是一个具有较长的生命周期但是没有用户界面的程序,一般由Activity启动,但是并不依赖于Activity,即当Activity的生命周期结束时,Service仍然会继续运行,直到自己的生命周期结束为止。Service的启动方式有两种:startService和bindService。
BroadcastReceiver:为用户接收广播通知的组件,当系统或某个应用程序发送广播时,可以使用BroadcastReceiver组件来接收广播消息并做相应处理。发送广播的三个方法:Context.sendBroadcast()、sendOrderedBroadcast()和sendStickyBroadcast()。
ContentProvider:用来实现应用程序之间数据共享的类。当需要进行数据共享时,一般利用Content Provider为需要共享的数据定义一个URI,然后其他应用程序通过Context获得ContentResolver并将数据URI传入即可。访问共享资源时,需要为应用程序添加适当的权限。
Intent和IntentFilter:
Intent是一种运行时的绑定机制,在应用程序运行时连接两个不同的组件。一般的应用是通过Intent向Android系统发出某种请求,然后Android系统会根据请求查询各个组件声明的IntentFilter,找到需要的组件并运行它。
Activity、Service及BroadcastReceive组件之间的通信全部使用的是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是由组件名称、Action、Data、Category、Extra及Flag六部分组成。
(1)组件名称:实际上就是一个ComponentName对象,用于标识唯一的应用程序组件;
(2)Action:实际上是一个描述了Intent所触发动作名称的字符串,已经定义好很多字符串常量来表示不同的Action,也可以自定义Action。
系统定义的常见Action:
Action_CALL:拨打Data里面封装的电话号码;
Action_EDIT:打开Data里指定数据所对应的编辑程序;
Action_VIEW:打开能够显示Data中封装的数据的应用程序;
Action_MAIN:声明程序的入口,该Action并不会接收任何数据,同时结束后也不会返回任何数据;
Action_BOOT_COMPLETED:BroadcastReceive Action的常量,表示系统启动完毕;
Action_TIME_CHANGED:BroadcastReceive Action的常量,表示系统时间通过设置而改变。
(3)Data:主要是对Intent消息中数据的封装,主要描述Intent的动作所操作到的数据的URI及类型。不同类型的Action会有不同的Data封装,例如打电话的Intent会封装tel://格式的电话URI,而ACTION_VIEW的Intent中Data则会封装http://格式的URI。
(4)Category:是对目标组件类别信息的描述。与Category相关的方法有三个:addCategory添加一个Category,removeCategory删除一个Category和getCategory得到一个Category。Android系统定义了一组静态字符常量来表示Intent的不同类型。
系统定义的常见Category:
CATEGORY_GADGET:表示目标Activity是可以嵌入到其他Activity中的;
CATEGORY_HOME:表示目标Activity为HOME Activity;
CATEGORY_TAB:表示目标Activity是TabActivity的一个标签下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时,一般是通过Action、Data及Category三方面进行检测的。