来源:Springer
书籍:Learn Android App Development
作者:Wallace Jackson
题目:Android Intents: Inter-Application Programming
章节:16
版次:2013
In this chapter, we will delve deeper into Android Intents. Intents are utilized by developers to process
inter-module communications or instructions within four primary functional areas comprising Android
Application Development: Activities, Services, Broadcast Receivers and Content Providers.
We have learned all about Activities, since those contain the front-end of your Android application,
including your designs, content, new media, user interface, and so on. In the next three chapters,
wersquo;re going to cover the other three primary functional areas for Android: Services (Processing),
Broadcast Receivers (Messaging), and Content Providers (Data Storage).
To be able to cover these three more advanced areas in Android application development, we
first need to cover the vast subject of Intents and Intent Filters. This is because Intents are more
heavily utilized in implementing these more complicated “behind the scenes” Android application
components.
Intents can also be utilized with Activities, and because we are well-versed with Activities we will
learn about how to use Intents with our Activities and, during the next three chapters, wersquo;ll also learn
how to leverage them using Services, Broadcast Receivers, and finally, with Content Providers.
In this chapter, we are going to look closely at both the Android Intent and Intent Filter class, and
all the various characteristics of Android Intents, as well as how these features, functions, settings,
constants, and similar characteristics are declared for use in your Android application.
We will take a closer look at Intent Filters, which allow you to automate how your Intents are utilized
in your application when it is used by other applications. As you may have surmised, declaring Intent
Filters for usage is done via your AndroidManifest.xml file, using the lt;intent-filtergt; tag.
This is one of the more complex and involved topics in Android, because it involves intermodule
communications, messaging, AndroidManifest, filters, and similarly advanced programming topics
in both Java and XML formats.
Android Intent Messaging: First, the Global Overview
Intent messaging is an Android OS facility providing late runtime binding between application
components within the same or different applications.
An Android Intent object is instantiated using the android.content.Intent class, which is a subclass
of java.lang.Object. This means that Intent was developed solely for its own unique purpose and is
not subclassed from any other type of Android class. Itrsquo;s packaged in the Android Content package,
as you can clearly see from the package name designation outlined previously.
The reason that it is packaged with the android.content package is because Intents can be used
to quickly access and to manipulate content providers (databases), which we will learn all about in
a future chapter. The usage of an Intent object is much broader than just database access, as it can
be used with Android Services, Activities, and Broadcast Receivers as well.
The Android Developer Reference defines Intents as abstract descriptions of an operation to be
performed. This means that Android designed Intents with the purpose of creating a Java object
type that can be utilized to easily accomplish tasks that would normally take complex programming
code.
So an Intent is essentially a programming shortcut, which has been built in to the Android OS and
programming environment to make things easier in the long-run. I say “in the long-run” because
first we need to learn how to use Intents and Intent Filters, and then they will become powerful to
us once we understand them, making us more advanced Android programmers.
An Intent object structure is known to be a passive data structure object, because it is simply a
passive collection of data, and instructions, which are bundled together in one comprehensive
Java object, which can easily be passed around between the various functional modules of your
application.
An Intent object data structure should contain a description that contains standard operating
system or developer created “actions” that need to be executed, and additionally passes over the
data upon which those actions need to process. This is passed to the Java code module via its
component name, specifying which class is the target for (receiving) the Intent.
We will be learning all about these Intent object data structure formats later on in this chapter.
In addition to these specific actions and data, an Android Intent object can also specify data type
(MIME) specifications, as well as category constants, flags, and even extra data pairs, which
are related to the primary data packet that is needed by the Intent action for processing. We will
be learning all about these various functional areas of Intent objects in great detail throughout the
remainder of the chapter.
Android Intent Implementation: Three Different
Types of Intent Usage
There are three different uses for Intent objects, each of
剩余内容已隐藏,支付完成后下载完整资料
书籍:Learn Android app development(学习安卓应用程序开发)
题目: Android Intents:inter-Application Programming(安卓意图:程序间通信编程)
在本章中,我们将深入探讨安卓意图。 开发者利用意图处理模块间通信或处理包括安卓应用开发的四个主要功能区域内的指令:活动,服务,广播接收机和内容提供商。
我们已经学习了所有活动的相关内容,因为那些内容包含您的安卓应用程序的前端,包括您的设计,内容,新媒体,用户界面等。 在接下来的三章中,我们将涵盖安卓的其他三个主要功能领域:服务(处理),广播接收机(消息)和内容提供商(数据存储)。
为了能够覆盖在安卓应用程序开发这三个更先进的领域,我们首先需要覆盖意图和意图过滤器的庞大领域。这是因为意图被更多大量利用在实现这些更复杂的“幕后”安卓应用程序组件。
意图也可以与活动一起使用,因为我们精通活动,我们就会了解如何使用意图与我们的活动,在接下来的三章中,我们也将学习如何使用服务,广播接收器,以及最后的内容提供商。
在本章中,我们将仔细研究安卓意图和意图过滤器类,以及安卓意图的所有各种特性,以及这些特性,功能,设置,常量和类似的特性被声明为在您的安卓应用程序中使用。
我们将仔细观察意图过滤器,它允许您在其他应用程序使用时自动化您的意图的使用方式。 正如你可能已经猜到的,声明意图过滤器通过使用您的AndroidManifest.xml文件,使用lt;intent-filtergt;标记。
这是安卓中更复杂和相关的主题之一,因为它涉及在Java和XML格式里的模块通信,消息,AndroidManifest,过滤器和类似的高级编程主题。
安卓意图消息:首先,全局概述
意图消息传递是一个安卓操作系统工具,提供应用程序之间的在相同或不同的应用程序中绑定应用组件。
一个安卓意图对象使用android.content.Intent类实例化,它是一个子类的java.lang.Object。这意味着意图是为了自己独特的目的而开发的,并且它不是任何其他类型的安卓类的子类。它被包装在安卓内容包中,正如你可以清楚地从之前概述的软件包名称中看到的一样。
它被android.content包包装的原因是因为意图可以使用意图快速访问和操纵内容提供者(数据库),这些内容我们将在未来的一章全部学习到。意图对象的使用比数据库访问更广泛,因为它可以与安卓服务,活动和广播接收器一起使用。
安卓开发人员参考说明书中将意图定义为对操作的抽象描述执行。这意味着安卓设计的意图的目的是创建一个Java对象类型,可以用于轻松完成通常需要复杂的编程的任务码。
因此,意图本质上是一个编程的快捷方式,它已经被内置到安卓操作系统和编程环境中使程序更容易长期运行。我说“在长期运行”因为首先我们需要学习如何使用意图和意图过滤器,然后一旦我们了解他们,他们就会对我们编程更有利,使我们能在安卓程序员中更进一步。
意图对象结构被称为被动的数据结构对象,因为它只是一个被动收集数据和说明的收集器,这些信息都是一起被捆绑在一个综合的Java对象里,它可以轻松地在你的应用的各个功能模块之间传递。
意图对象数据结构应包含这样一个描述,描述包含标准操作系统或开发者创建需要执行的“动作”,并且另外包含通过这些操作需要处理的数据。这是并通过它传递给Java代码模块组件名称,指定哪个类是(接收)意图的目标。
我们将在本章后面了解这些意图对象的数据结构格式。
除了这些特定的动作和数据,安卓意图对象还可以指定数据类型(MIME)规范,以及类别常量,标志,甚至额外的数据对与用于处理的意图动作所需的主数据包相关。我们会在本章的剩余部分中非常详细地学习所有关于意图对象的各种功能区域。
安卓意图实现:三种不同方法
意图用法的类型
意图对象有三种不同的用法,每种都可以在安卓中使用操作系统调用您的活动,服务之间的模块间通信,和广播接收机。
但是一种类型的意图对象,可以用于每一个操作系统的三个特定区域。为了避免产生错误,意图对象使用的不同分类类型是不允许互换的。
当然,你可以命名你的意图对象为任何你喜欢的名字,但这类意图处理方法的调用,是围绕着应用程序模块来传递你的意图对象,这最终将涉及决定使用什么类型的意图对象,不管你在构建意图对象时把它命名为了什么。意图的使用类型决定使用什么类型的意图(或更准确地说,意图是用来完成什么样的目标)。
不同的意图对象方法调用是用于确保不会混淆意图对象彼此间的这些不同用途,也就是说,它们永远不会与任何其他在使用中的某一个意图对象相交,干扰,碰撞,或被错误地使用。
例如,startActivity()使用意图对象来启动一个活动,而startService()使用一个意图对象来启动一个服务。要发送意图对象到广播接收器,将使用broadcastIntent()方法,因此分配意图对象的方法决定了它的实现。
因此,我们将分别介绍意图对象的每个使用场景,以便我们可以看到在基于通信的通讯上的活动,服务和广播接收器消息之间是怎样的不同。
在本书的最后一节中,我们还将在安卓操作系统的这四个主要领域中都练习使用意图对象。因为你在活动的使用方面已经是专家,在这一章,我们就会看看使用意图对象与活动子类的代码示例。接下来的三章是关于安卓服务,广播接收器和内容提供商的,我们也将了解意图对象是怎样被用来启动和控制安卓中的这些其他功能区域。
活动
与活动一起使用的意图对象通过使用Context.startActivity()或Activity.startActivityForResult()来启动活动的方式在每个活动中传递,或者来请求现有活动执行一些特定于应用程序的编程任务。
可以使用Activity.setResult()方法将意图返回,以通过使用Activity.startActivityForResult()方法首先将信息返回到发起意图通信的调用活动上。
Android Services
要与安卓服务一起使用的意图对象将使用Context.startService()方法调用传递到服务子类,以启动Android服务,或向已启动的服务交付新指令。我们将在本书的下一章中学习有关服务的所有内容。
也可以使用Context.bindService()方法传递意图对象,以在调用应用程序组件和绑定服务之间建立连接(绑定)。如果服务尚未启动和运行,意图也可以启动绑定服务。
我们将在本书的下一章中介绍绑定服务,以及启动的服务和混合服务。我们将介绍如何在这种情况下使用意图,因此,我在这里讨论有关不同类型的意图的上下文和概述的目的。
广播接收机
传递到任何安卓广播接收机方法的意图对象都会传递到所有感兴趣的安卓广播接收机。大量的安卓操作系统广播将源自安卓系统代码,正如在Linux操作系统的复杂并完整的版本中所预期的那样。
意图方法调用的广播接收机的特定版本包含我们在第18章中讨论的Context.sendBroadcast()方法,Context.sendOrderedBroadcast()方法和Context.sendStickyBroadcast()方法。
因为每种类型的意图都有唯一的调用方法,所以安卓系统可以轻松地找到需要响应每个特定意图对象的相应应用程序的活动,服务或广播接收机。
由于安卓意图系统的设置方式,这些意图消息系统之间是没有重叠的。广播接收机意图仅传送到广播接收机,而不是安卓活动或服务。使用.startActivity()方法传递的意图对象仅传递到活动子类,并且不会传递到服务子类或广播接收机子类,等等。
书籍:Pro Android 5
题目:Introduction to Android Application Architecture(安卓应用程序架构简介)
第一章涵盖了开发安卓应用程序所需的环境和工具。本章将对安卓应用程序架构进行广泛的介绍。我们会做三件事。首先,我们将通过构建一个安卓应用程序的架构来展示它。然后我们将介绍安卓架构的基本组件,即活动,资源,意图,活动生命周期和保存状态。我们将以本章的一个学习路线图,如何使用本书的其余部分来创建简单到复杂的移动应用程序作为本章结束。
在本章的第一部分,一个一页的计算器应用程序将给你一个使用安卓SDK编写应用程序的大体框架观。创建此应用程序将演示如何创建UI,编写Java代码以控制UI,以及构建和部署应用程序。
除了演示UI,此计算器应用程序将向您介绍活动,资源和意图。这些概念是安卓应用程序架构的核心。
我们将在本章的第二部分详细介绍这些主题,以便为理解安卓SDK的其余部分提供强大的基础。我们还将介绍该活动生命周期和应用程序的持久性选项的简要概述。
在第三部分中,我们将给出针对的书的其余部分的路线图来介绍构建安卓应用程序的基本和高级方面。最后一节打破了章节概念而成一套的学习轨道。这一节是对整套安卓API的广泛介绍。
此外,在本章中,您将找到以下答案:如何创建UI一套丰富的控制?如何永久存储状态?如何读取静态文件输入到应用程序?我如何联系和读取或写入网络?安卓提供了什么其他的API,能使我的应用程序功能和丰富?
不要迟疑,让我们通过带你进入简单的计算器应用程序来打开安卓的世界。
void onCreate(Bundle savedInstanceState)
活动的生命周期从这个方法开始。在这种方法中,你应该通过将布局加载到活动的内容视图中来加载你的视图以生成层次结构。你还可以初始化在活动生命周期中可能使用的任何活动级别变量。像许多回调一样,你也要首先调用父类的onCreate()方法。
当调用onCreate时,活动可能处于三种状态之一。活动可能有是第一次开始的全新的活动。或者它可能是一个活动由于设备旋转的配置更改而自动重新启动一个方向到另一个的活动。或者它是在上一个进程之后由于低内存条件和在后台关闭而重新启动的活动。在onCreate回调中,如果在每个场景中需要做的不同,你应该考虑这些情况。
现在我们可以理解这个方法的参数涉及savedInstanceBundle。
你可以使用此捆绑包查看活动的上一个状态。这个包可能最初用于在配置更改期间或当活动及其进程由于低内存条件而关闭时保存活动的状态。保存到此bundle参数中的状态通常称为实例状态活动。实例状态在某种程度上是暂时的;具体来说,它在此调用期间绑定到应用程序的此实例。这种类型的状态不会被写入永久存储(如文件)。用户不会过于担心该状态是否会在恢复应用程序时恢复到初始状态。在回调中我们将很快解释被称为onPause()的方法,在其中你可以保存必须持久化到长期存储的状态。如果发生这种情况,你也可以使用onCreate()方法加载该状态以及部分启动该状态。
还有一个这种方法可以重视的考虑。当由于方向更改而重新启动或重新创建活动时,旧活动将被销毁,并在其位置创建新活动。这意味着新活动在内存中有一个新的引用。旧的活动引用不再有效。有一个外部线程或一个全局对象持有旧的活动是错误的。因此,当重新创建活动以告诉外部对象有新的活动引用时,需要有一种机制。为此,重新创建的活动需要知道该外部对象的引用。这个外部对象引用被称为“非配置实例引用”。有一个称为onRetainNonConfigurationInstance()的回调方法可以返回对这个外部对象的引用;我们将很快覆盖这一点。安卓SDK随后保留此引用,并通过称为getLastNonConfigurationInstance()的方法使其可用于重新创建的活动。注意在第8章中,我们将通过所谓的无头保留片段告诉你如何更好地做到这一点。我们也将在第15章关于AsyncTask的话题中回到这个主题。
onCreate方法有另一个细微差别。你可能需要确保在布局中有正确的视图和片段(你将在第8章中学习)在保存状态时匹配。因为后续的onRestoreInstanceState()(在onStart()之后调用)假定所有视图和片段层次都存在以恢复其各自的状态,所以仅存在先前状态将不会重新创建视图。所以它是由这种方法加载正确的布局显示。如果在与活动交互期间不删除或添加视图,通常不会出现问题。
void onStart()
创建后,此方法将活动推送到可见状态。换句话说,该方法开始活动的“可见生命周期”。这个方法在onCreate()之后调用。此方法假定视图层次结构已从onCreate()加载并可用。你通常不需要重写这个方法,如果你这样做,请确保你先调用父的onStart()。在图2-2中注意,这个方法也可以从另一个名为onRestart的回调中调用。
你必须知道在此方法后调用onRestoreInstanceState方法。
因此你不应该假设这个方法中的视图的状态。所以尽量不要在这个方法中操纵视图的状态。在随后的onRestoreInstanceState或onResume方法中进行细化。因为这是onStop()的对应,如果你已经停止了onStop()或onPause()中的东西,做相反的操作。
如果你在这个方法中看到一些东西,仔细看看它,并确保它是你想要的。还要知道启动和停止循环可以在活动的整个当前循环期间发生多次。
此方法也可以在活动被隐藏之后调用,因为另一个activity已经到达可见性堆栈的顶部。在这种情况下,这种方法是在onRestart()之后调用,onRestart()本身是在onStop()之后触发。所以有两条路到这个方法:onCreate()或onRestart()。在这两种情况
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[138859],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。