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

今天学习Android项目结构,了解一下Andorid项目有哪些部分构成。

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

 

  •  Activity
  •  Broadcast Intent Receiver
  •  Service
  •  Content Provider
  •  

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

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3.         package="com.my_domain.app.helloactivity">
    4.         
    5.     <application android:label="@string/app_name">
    6.     
    7.         <activity android:name=".HelloActivity">
    8.             <intent-filter>
    9.                 <action android:name="android.intent.action.MAIN"/>
    10.                 <category android:name="android.intent.category.LAUNCHER"/>
    11.             </intent-filter>
    12.         </activity>
    13.         
    14.     </application>
    15.     
    16. </manifest>

     

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

     

    1. Activity(场景)

    一个Activity通常是一个项目中的单一画面。每个Activity在编程时对应一个继承自android.app.Activity的JAVA类。该类表示一个包含视图(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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值