您的位置:首页 > 移动开发 > Android开发

热恋Android (3 -- Android项目结构)

2008-09-21 08:41 190 查看
今天学习Android项目结构,了解一下Andorid项目有哪些部分构成。

一个Andorid项目可以包含(但不一定全部包含)下面部件:



Activity

Broadcast Intent Receiver

Service

Content Provider



在Andorid项目中,AndroidManifest.xml文件记录了该项目使用了哪些部件。下面是一个AndoidManifest.xml的例子:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.my_domain.app.helloactivity">



<application android:label="@string/app_name">



<activity android:name=".HelloActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>



</application>



</manifest>


下面分别介绍一下这四个部件:

1. Activity(场景)
一个Activity通常是一个项目中的单一画面。每个Activity在编程时对应一个继承自android.app.Activity的J***A类。该类表示一个包含视图(View)和行为(respond to events)的用户界面。大多数项目包含多个画面。但在同一时刻,只有一个当前画面供用户操作和查看。在程序运行过程中,随着一个新的Activity的开始,画面要进行切换。一个Activity可以返回一个值,以便下个Activity对该值进行处理。
举个例子,假设有个通讯录程序,其中包括修改联系人信息的功能。这个功能的操作流程如下:
Activity1: 用户在功能菜单选择修改联系人
Activity2: 显示联系人列表,如果用户选择取消,回到Activity1; 如果用户从中选择了要修改的联系人,进入Activity3
Activity3: 显示修改联系人画面,用户在该画面完成修改
回到Activity2
在这个过程中,Activity2会将选择的联系人作为返回值交给Actity3。在切换Activity时,每当打开一个新画面,上个画面会被Push到历史堆栈中,以便执行回退动作。比如上个例子中,Activity2中,可以回退到Activity1。可以从一个画面直接回退到之前访问的任何画面,比如当用户选择"Home",直接回退到主场景。
在上面的XML代码中,<activity>元素中包含了一个 <intent-filter> 元素。这个intent-filter又是什么呢?Intent表示一个项目想要做什么,其中包括两个重要部分:action(行为)和基于行为的数据。一般的,Action: MAIN (程序入口),VIEW, PICK, EDIT, 等。所有的数据用URI表示。比如在联系人信息画面,你可以通过向该页面指定一个VIEW Action并且将表示联系人的URI和这个Action"关联"起来。这个"关联"关系,通过IntentFilter类来表示。这样,在<activity>元素中,包含一个<intent-filter>元素,并在其中完成Action及其数据的关联,就是这样,构成了一个完整的Activity。
要完成不同画面的定向,就要靠Intent了。如果要定向到指定的Intent,就调用Activity对象的startActivity(myIntent)方法。当调用该方法时,系统会在所有的Intent-filter中查找最匹配的Intent,因为一个Activity关联了一个Intent,所以调用startActivity(myIntent)方法的结果就是从一个Activity切换到另一个Activity。当另一个Acitvity被激活时,它的startActivity()方法会被调用。

2.Broadcast Intent Receiver
使用BroadcastReceiver你可以在程序中感应系统广播Intent。BroadcastReceiver并不提供用户界面,只能通过NotificationManager通知用户某些事件发生了,比如电话铃响了,有新的可用数据连接等。BroadcastReceiver有两种注册方式:一种是通过 AndroidManifest.xml,另一种是通过Context.registerReceiver()进行注册。一个程序可以注册多个BroadcastReceiver。如果你需要的话,当某个程序注册的BroadcastReceiver被触发时,该程序可以自动启动,以处理BroadcastReceiver发出的事件。
一个程序不但可以使用BroadcastReceiver接收广播Intent。而且可以向系统广播Intent。要向系统广播Intent,你只需调用Context.sendBroadcast()方法即可。

3.Service
一个Service是常驻系统的,没有UI(用户界面)的。举个例子,你可以在手机上一边听音乐,一边编辑短信,此时音乐播放器并没有显示界面,而是在后台运行。要实现这样的功能,就要用到Service了。当需要后台运行时,这个音乐播放器程序可以调用Context.startService()方法让程序继续在后台运行,直到程序运行完毕。


4.Content Provider

有的程序需要存储数据的地方,比如文件、SQLite数据库,或其他机制。Content Provider允许你的程序可以和其他程序共享数据。一个Content Provider实际上就是一个包含了可以供其他程序访问共享数据的方法的类。



以上四类中,适用于不同的程序,也可以混合适用,以达到丰富的效果。当然,最常用的还是Activity。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: