任何Android应用程序都是由以下4个部分中的必要组合而成:

  • Activity
  • Intent Receiver
  • Service
  • Content Provider
  • 1、Activity

    Activity是Android构造块中最基本的一种,在应用中, 一个activity通常就是一个单独的屏幕。每一个activity都被实现为一个独立的类,并且继承于Activity这个基类。这个 activity类将会显示由几个Views控件组成的用户接口,并对事件做出响应。大部份的应用都会包含多个的屏幕。例如,一个短消息应用程序将会有一 个屏幕用于显示联系人列表,第二个屏幕用于写短消息,同时还会有用于浏览旧短消息及进行系统设置的屏幕。每一个这样的屏幕,就是一个activity。从 一个屏幕导航到另一个屏幕是很简单的。在一些应用中,一个屏幕甚至会返回值给前一个屏幕。

    当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。

    Android使用了Intent这个特殊类,实现在屏幕与屏幕之间移动。 Intent类用于描述一个应用将会做什么事。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型 有:MAIN(activity的门户)、VIEW、PICK、EDIT等。而动作对应的数据则以URI的形式进行表示。例如:要查看一个人的联系方式, 你需要创建一个动作类型为VIEW的intent,以及一个表示这个人的URI。

    与之有关系的一个类叫IntentFilter。相对于intent 是一个有效的做某事的请求,一个intent filter则用于描述一个activity(或者Intent Receiver)能够操作哪些intent。一个activity如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个 IntentFilter要知道怎么去处理VIEW动作和表示一个人的URI。IntentFilter需要在AndroidManifest.xml中 定义。

    通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。 当向前导航时,activity将会调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的 activity。新的activity接收到myIntent的通知后,开始运行。当startActivity方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:

    A、Activities能够重复利用从其它组件中以Intent的形式产生的一个请求;

    B、Activities可以在任何时候被一个具有相同IntentFilter的新的Activity取代。

    2、Intent Receiver

    当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响应,你可以使用一个Intent Receiver。虽然Intent Receiver在感兴趣的事件发生时,会使用NotificationManager通知用户,但它并不能生成一个UI。Intent Receiver在AndroidManifest.xml中注册,但也可以在代码中使用Context.registerReceiver()进行注 册。当一个intent receiver被触发时,你的应用不必对请求调用intent receiver,系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的 intent receiver广播给其它应用程序。

    3、Service

    一个Service是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用 中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航 到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个 service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外,我们还可以通过 使用Context.bindService()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个 service之后,我们还可以service提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。

    4、Content Provider

    应用程序能够将它们的数据保存到文件中、SQL数据库中,甚至是任何 有效的设备中。当你想将你的应用数据与其它的应用共享时,Content Provider将会很有用。一个Content Provider类实现了一组标准的方法,从而能够让其它的应用保存或读取此Content Provider处理的各种数据类型。

    更详细的Content Provider资料,可以参考附带文档中的Accessing Content Providers。

    更多相关文章

    1. 【 Android】使手机屏幕常亮,不进入待机状态
    2. Android中屏幕相关的操作
    3. Android获得屏幕分辨率的两种方法
    4. android edittext 键盘弹出屏幕自适应
    5. 获取Android 手机屏幕宽度和高度以及获取Android手机序列号
    6. LinearLayout 让最后一个空间靠到屏幕底部
    7. android获取屏幕分辨率大小(DisplayMetrics)

    随机推荐

    1. Android(安卓)Studio 将引用第三方jar包
    2. 完美解决 No IDEA annotations attached
    3. Android窗口机制(三)Window和WindowManager
    4. Android 属性大全
    5. Android中的自绘View的那些事儿(四)之 Comp
    6. Android(安卓)| gravity和layout_gravity
    7. 安卓textview edittext 中inputType的类
    8. Android游戏引擎-Rokon
    9. 如何在Android中获知屏幕打开或者关闭
    10. android:gravity ,和 android:layout_grav