`
zhaohaolin
  • 浏览: 1011595 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android开发之旅:应用程序基础及组件(续)

阅读更多

Android开发之旅:应用程序基础及组件(续)

——成功属于耐得住寂寞的人,你离成功又近了一步了。

引言

上篇Android开发之旅:应用程序基础及组件 介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等。本文的主题如下:

  • 1、激活组件:意图(Intents)
    • 1.1、活动(Activity)组件的激活
    • 1.2、服务(Service)组件的激活
    • 1.3、广播接收者(Broadcast receiver)组件的激活
  • 2、关闭组件
  • 3、清单文件
  • 4、Intent过滤器

1、激活组件:意图(Intents)

当接收到ContentResolver 发出的请求后,内容提供者被激活。而其它三种组件——活动、服务和广播接收者,被一种叫做意图(intent )的异步消息 激活。意图是一个保存着消息内容的Intent 对象。对于活动和服务来说 ,Intent对象指明了请求的操作名称以及作为操作对象的数据的URI和其它一些信息。例如,它可以传递对活动的一个请求,让它为用户显示一张图片,或者让用户编辑一些文本。而对于广播接收者而言 ,Intent对象指明了广播的行为。例如当照相按钮被按下,它可以对所有感兴趣的对象广播。

对于每种组件来说,激活的方法是不同的。下面将分别介绍活动、服务、广播接收者组件的激活方法。

1.1、活动(Activity)组件的激活

通过传递一个Intent对象至Context.startActivity()Activity.startActivityForResult() 以载入(或指定新工作给)一个活动。相应的活动可以看到初始的意图,这个意图通过getIntent() 方法来查看激活活动。Android调用活动的onNewIntent() 方法传递任何后续的意图。

一个活动经常启动了下一个。如果它期望它所启动的那个活动返回一个结果,它会调用startActivityForResult() 而不是startActivity() 。例如,如果它启动了一个活动让用户挑选一张照片,它可能会返回被选中的照片。结果以一个Intent对象传递调用活动的onActivityResult() 方法。

1.2、服务(Service)组件的激活

通过传递一个Intent对象至Context.startService() 以启动一个服务(或给予正在运行的服务以一个新的指令)。Android调用服务的onStart() 方法并将Intent对象传递给它。

与此类似,一个Intent可以传递给Context.bindService() 以在调用的组件和目标服务之间建立持续的连接。这个服务会在调用onBind() 方法中接受这个Intent对象(如果服务尚未启动,bindService() 会先启动它)。例如,一个活动可以连接至前面讲到的音乐播放服务,并提供给用户一个可操作的(用户界面)以对播放进行控制。这个活动可以调用bindService() 来建立连接,然后调用服务中定义的对象来控制播放。

1.3、广播接收者(Broadcast receiver)组件的激活

应用程序可以通过将Intent对象传递给

  • Context.sendBroadcast()
  • Context.sendOrderedBroadcast()
  • Context.sendStickyBroadcast()

及其它类似方法来产生一个广播。Android会通过onReceive() 方法将intent传递给所有对此广播有兴趣的广播接收者。

2、关闭组件

内容提供者仅在响应ContentResolver 提出请求的时候激活。而一个广播接收者仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。

而活动则不同,它提供了用户界面。与用户进行会话,所以只要会话依然持续,哪怕对话进程空闲,它都会一直保持激活状态。与此相似,服务也会在很长一段时间内保持运行。所以Android提供方法有序地关闭活动和服务。

  • 可以通过调用它的finish() 方法来关闭一个活动。一个活动也可以通过调用finishActivity() 方法来关闭另外一个活动(它用startActivityForResult() 启动的)。
  • 服务可以通过调用它的stopSelf() 方法来停止,或者调用 Context.stopService()

当组件不再被使用的时候或者Android必须要为更多活跃的组件回收内存时,组件也可能会被系统关闭。

3、清单(manifest)文件

当Android启动一个应用程序组件之前,它必须知道那个组件是存在的。所以,应用程序会在一个清单(manifest)文件中声明它的组件,这个文件会被打包到Android包中。这个.apk文件还将包括应用程序的代码、文件以及其它资源。

这个清单文件是XML结构的文件,且所有的Android应用程序都把它叫做AndroidManifest.xml 。为声明一个应用程序组件,它还会做很多额外工作,比如指明应用程序所需链接到的库的名称(除了默认的Android库之外)以及声明应用程序期望获得的各种权限。

但清单文件的主要功能仍然是向Android声明应用程序的组件。举例说明,一个活动可以如下声明:

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

<
manifest
 . . . >
   
    <
application
 . . . >

         <
activity
 android
:name
="com.example.project.FreneticActivity"

                   android
:icon
="@drawable/small_pic.png"

                   android
:label
="@string/freneticLabel"

                    . . .  >
 
         </
activity
>

          . . . 
     </
application
>

</
manifest
>


<activity> 元素的name 属性指定了实现了这个活动的Activity 类的子类,iconlabel 属性指向了包含展示给用户的此活动的图标和标签的资源文件。

其它组件也以类似的方法声明——<service> 元素用于声明服务,<receiver> 元素用于声明广播接收者,而<provider> 元素用于声明内容提供者。清单文件中未进行声明的活动、服务以及内容提供者将不为系统所见,从而也就不会被运行。然而,广播接收者既可以在清单文件中声明,也可以在代码中动态的创建(作为BroadcastReceiver 对象)且调用Context.registerReceiver() 方式注册到系统。

4、Intent过滤器

Intent对象可以显式地指定目标组件。如果进行了这种指定,Android会找到这个组件(依据清单文件中的声明)并激活它。但如果Intent没有进行显式的指定,Android就必须为它找到对于intent来说最合适的组件。这个过程是通过比较Intent对象和所有可能对象的intent过滤器完成的 。组件的intent过滤器会告知Android它所能处理的intent类型。如同其它关于组件的必要信息一样,它们在清单文件中进行声明的。这里是上面示例的一个扩展,其中加入了针对活动的两个intent过滤器声明:

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

<
manifest
 . . . >
   
    <
application
 . . . >

         <
activity
 android
:name
="com.example.project.FreneticActivity"

                   android
:icon
="@drawable/small_pic.png"

                   android
:label
="@string/freneticLabel"

                    . . .  >
 
              <
intent
-filter
 . . . >

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

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

              </
intent
-filter>

              <
intent
-filter
 . . . >

                  <
action
 android
:name
="com.example.project.BOUNCE"
 />

                  <
data
 android
:mimeType
="image/jpeg"
 />

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

              </
intent
-filter>

         </
activity
>

          . . . 
     </
application
>

</
manifest
>


示例中的第一个过滤器——action:“android.intent.action.MAIN”和 category:“android.intent.category.LAUNCHER”的组合,是常见的。它标记这个活动显示在应用程序启动器中,用 户在设备上看到的可启动的应用程序列表。换句话说,这个活动是应用程序的入口,是用户选择运行这个应用程序后所见到的第一个活动。第二个过滤器声明了这个 活动针对特定类型的数据。

一个组件可以拥有任意数量的intent过滤器,每个声明一系列不同的能力。如果它没有包含任何过滤器,它将只能被显式声明了目标组件名称的意图激活。

对于广播接收者,它在代码中创建并注册intent过滤器,直接作为IntentFilter的对象实例化。其它过滤器则在清单文件中设置。

 

如果您现在对这些概念还没有完全理解,没关系这里我仅是让大家有个印象,知道这些概念或术语的存在,知道他们大概是做什么的。后面我还将陆续更详细地到这些东西并结合一些实例,到时候您就会清楚地知道这些东西。

分享到:
评论

相关推荐

    Android开发之旅

    Android开发之旅:应用程序基础及组件(续) 5 Android开发之旅:活动与任务 6 Android开发之旅:进程与线程 7 Android开发之旅:组件生命周期(一) 8 Android开发之旅:组件生命周期(二) 9 Android开发之旅...

    Android开发之旅:HelloWorld项目的目录结构.pdf

    在Android开发中,创建第一个应用通常是从"HelloWorld"开始的。这个项目不仅帮助开发者熟悉基本的环境配置,还展示了Android应用程序的基本目录结构。在深入理解Android开发之前,掌握项目目录结构至关重要。以下是...

    Android开发之旅:HelloWorld项目的目录结构

    `Activity`是Android应用程序中用户界面的基本单元,负责处理用户交互和展示UI。`Bundle`用于在不同方法之间传递数据,例如在活动生命周期的不同阶段保存和恢复状态。 2. **gen 文件夹**:这个文件夹下的`R.java`...

    Android开发关键技术之旅:Java程序员快速学习通道

    根据提供的文件信息,本文将围绕“Android开发关键技术之旅:Java程序员快速学习通道”这一主题进行深入探讨,并结合Java编程背景,解析与Android开发相关的重点技术和实践路径。 ### Android开发的关键技术概览 #...

    android开发关键技术之旅

    在“Android开发关键技术之旅”这个资源中,您将踏上成为一名熟练Android开发者的旅程。这个学习资料包特别适合那些已经有Java编程基础...在学习过程中,不断实践和反思是关键,祝您在Android开发之路上取得丰硕成果!

    Android平台开发之旅(第2版)

    通常,Android开发之旅会涵盖以下核心知识点: 1. **环境搭建**:介绍如何安装Android Studio,配置开发环境,设置虚拟设备(AVD)或连接物理设备进行调试。 2. **基本组件**:讲解Activity、Service、...

    Android平台开发之旅源码

    了解这些是开始Android开发的必备基础。 2. **Hello World程序**:书中可能包含一个简单的"Hello, World!"程序,用于演示如何创建一个新的Android项目,熟悉XML布局文件和Java活动类的编写,这是每个Android开发者...

    Android开发之旅(2):android架构.rar

    在Android开发之旅(2):android架构的主题中,我们将深入探讨Android系统的架构,这是一个复杂的多层次设计,涵盖了操作系统、中间件层、应用程序框架以及各种应用程序。Android的架构是其强大功能和灵活性的基础,...

    android移动应用开发基础教程PPT

    总的来说,这份Android移动应用开发基础教程PPT旨在为初学者提供全面的入门指导,帮助他们快速掌握Android开发的基础技能,从而开启Android编程之旅。无论你是教师还是自学的爱好者,这份资源都将是你宝贵的参考资料...

    Android平台开发之旅(第2版)光盘

    《Android平台开发之旅(第2版)光盘》是一本深度探索Android开发的书籍,针对Android 3/4系统的新特性进行了详细的解析。这本书旨在通过实际的开发案例,帮助读者理解并掌握Android平台开发的基本概念、实用技术...

    Android开发之旅(2):android架构.pdf

    【Android开发之旅(2): Android架构】 Android架构是构建Android应用程序的基础,它由五个主要部分组成,分别是Linux Kernel、Android Runtime、Libraries、Application Framework和Applications。这些组件共同协作...

    Android开发之旅(2):android架构.doc

    Android开发之旅的第二篇章主要探讨的是Android系统的架构,这一部分对于初学者来说至关重要,因为它提供了对Android系统全貌的理解,避免在学习过程中迷失方向。Android架构由五个主要部分构成: 1. **Linux ...

Global site tag (gtag.js) - Google Analytics