成功属于耐得住寂寞的人,你离成功又近了一步了。
引言
上篇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声明应用程序的组件。举例说明,一个活动可以如下声明:
AndroidManifest.xml<?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类的子类,icon和label属性指向了包含展示给用户的此活动的图标和标签的资源文件。
其它组件也以类似的方法声明——<service> 元素用于声明服务,<receiver> 元素用于声明广播接收者,而<provider>元素用于声明内容提供者。清单文件中未进行声明的活动、服务以及内容提供者将不为系统所见,从而也就不会被运行。然而,广播接收者既可以在清单文件中声明,也可以在代码中动态的创建(作为BroadcastReceiver
对象)且调用Context.registerReceiver()方式注册到系统。
4、Intent过滤器
Intent对象可以显式地指定目标组件。如果进行了这种指定,Android会找到这个组件(依据清单文件中的声明)并激活它。但如果Intent没有进行显式的指定,Android就必须为它找到对于intent来说最合适的组件。这个过程是通过比较Intent对象和所有可能对象的intent过滤器完成的。组件的intent过滤器会告知Android它所能处理的intent类型。如同其它关于组件的必要信息一样,它们在清单文件中进行声明的。这里是上面示例的一个扩展,其中加入了针对活动的两个intent过滤器声明:
AndroidManifest.xml<?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概述 Android是一种基于Linux内核的开源...以上内容涵盖了Android应用程序开发的基础知识和技术要点,希望能帮助读者更好地理解和掌握Android开发的相关技能。
Android 作为最流行的移动操作系统之一,拥有庞大的用户群体和丰富的第三方应用程序生态系统。为了帮助开发者更好地学习和掌握 Android 移动应用开发技术,本文将提供一份详细的习题答案,涵盖 Android 开发环境...
《Android应用程序开发...通过深入学习和实践《Android应用程序开发(第三版)》的课件源程序,开发者不仅可以掌握基本的Android开发技能,还能了解最新的Android平台特性,为开发高质量的Android应用打下坚实基础。
Android开发之旅:应用程序基础及组件(续) 5 Android开发之旅:活动与任务 6 Android开发之旅:进程与线程 7 Android开发之旅:组件生命周期(一) 8 Android开发之旅:组件生命周期(二) 9 Android开发之旅...
总的来说,《Android应用程序开发与典型案例》覆盖了Android开发的核心概念和技术,提供了充足的实践机会,对于希望提升Android开发能力的人来说,是一本不可或缺的参考书。通过深入阅读和实践书中的内容,开发者...
在2017年的版本中,Lazarus为Android开发带来了一系列改进,包括更好的兼容性、优化的性能以及更多的组件支持。首先,我们来了解Lazarus的基本架构和工作流程。 1. **Lazarus IDE**:Lazarus提供了一个类似于Delphi...
2. **编程语言**:Java和Kotlin是Android开发的主要编程语言。Java是Android早期的主要选择,而Kotlin自2017年起被Google宣布为首选语言,因其简洁、安全和富有表达性的语法受到欢迎。 3. **AndroidManifest.xml**...
[14本经典Android开发教程]-4-Android应用程序开发36技 本书共分为4篇: ※ 第一篇:介绍应用框架概念、原理和特性。 ※ 第二篇:阐述应用框架之设计技巧。亦即,如何打造应用框架。 (注:如果你的职务是「使用」...
Android应用开发基础涵盖了从系统架构到开发环境搭建的多个关键知识点。首先,Android作为一个开源的操作系统,是Google基于Linux平台开发的,适用于智能手机。其核心包括操作系统、中间件以及一系列预装的应用程序...
这些组件构建了 Android 应用程序的基础框架,使开发者可以创建具有高度交互性和模块化功能的应用。 此外,Android 提供了一个丰富的 SDK(软件开发工具包),包括各种工具、库和API,用于构建、调试和发布应用程序...
在 Android 桌面应用程序中,Home 分析目录是非常重要的组件之一,负责管理桌面上的图标、快捷方式、widget 等元素。Home 分析目录的主要功能包括: 1. 桌面图标管理:Home 分析目录负责管理桌面上的图标,包括添加...
Android概述,讲述了Android的前生后世、架构和特点、Android Market、应用程序组件和Android与Java ME的区别及联系 第2章 Android开发基础 Android开发基础,讲述了Android开发环境的搭建、Android常用工具的使用...
通过深入分析和实践这些源代码,你不仅能够快速掌握Android开发的基本技能,还能理解实际项目中的最佳实践,为你的Android开发之路打下坚实的基础。记住,源代码是学习的最佳教材,通过阅读和修改他人的代码,你将...
在Android应用程序开发领域,这本书的源码提供了丰富的学习材料,涵盖了多个关键知识点。以下是各章节内容的详细解析: 第3章《第一个Android程序》:这一章通常会介绍Android开发环境的搭建,包括安装Android ...
Android 应用程序开发作业流程要点包括 Java 基础知识、Android 应用程序开发环境搭建、Android 应用程序目录结构、新建一个 Android 应用、Android 四大组件及界面 UI 元素、Android 应用程序工作机制、Android ...
manifest 是 Android 应用程序的配置文件,用于声明应用程序的组件、权限和其他配置信息。我们需要在 manifest 文件中声明 launcher 的组件,包括 Activity、Service 和 BroadcastReceiver 等。 6. Security ...