您现在的位置是:首页 > 文章详情

《Android应用开发》——2.4节应用类

日期:2017-05-01点击:375

本节书摘来自异步社区《Android应用开发》一书中的第2章,第2.4节应用类,作者 【美】Chris Haseman,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.4 应用类
Android应用开发
一个典型的Android应用是一个由活动、广播接收方、服务和内容提供方组成的集合。应用类是把所有这些不同的部分粘合成一个单一的、相融合的实体的“胶水”。每当清单文件中初始化一个内容提供方、活动、服务或意图接收方的时候,也同时启动一个应用类,并使其可用。

2.4.1 默认的应用声明
查看AndroidManifest.xml文件,会看到一个典型的应用类声明如下所示:

<application android:icon="@drawable/icon" android:label="@string/app_name"> <!—Activities, Services, Broadcast Receivers, and Content Providers --> </application>

可以看到标记。清单里的这部分内容在典型情况下包含与应用相关的信息。android:icon告诉系统在主应用列表中显示什么图标。这里的android:label指的是此前编辑过的strings.xml文件中的另一个数据项。

2.4.2 自定义应用
添加自定义应用所要采取的步骤与添加一个新活动时非常类似。

(1)在现有的AndroidManifest.xml清单文件中添加一个名字域。

(2)在扩展Application类的程序包内创建一个新的应用类。

(3)利用新应用类。

下面详细介绍步骤(1)和步骤(2)。你自己完成步骤(3)。

1.名字
关于清单文件中的名字, android:name不是指所描述的对象的名字,而是指该类在Java程序包内的位置。应用的声明也是一样。带有新声明的应用的开始标记如下所示;

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name= ".SampleApplication">

这个声明告诉系统在Android应用列表中想用什么图标来代表这个应用。

类装载程序会将android:name的内容附加到在的开始标记内部的程序包声明的末尾,以此寻找应用类的位置。现在需要真正创建这个应用类,以满足类装载程序。

2.应用类
在最基本的层次上,如下代码可以创建一个应用类:

import android.app.Application; public class SampleApplication extends Application{ public void onCreate(){ super.onCreate(); } }

应用可以是一个非常简单的类。如果不了解以下几个方面,就很难理解应用类能做什么。

活动非常短暂。
活动不能访问彼此的存储空间,它们通过意图来通信。
由于各种原因,活动不断被终止和启动,活动无法知道自己是否是应用运行期间内的第一次启动。而另一方面,只有在应用初始化的时候才调用应用类的onCreate方法。
因此,应用很适合于执行只有在应用第一次启动时才会发生的动作。

对于可能涉及多个活动的数据,需要一个临时的存放地,属于应用类一部分的某个数据成员是很便于存储它的地方。

向应用类中添加数据必须非常小心。在清单文件中声明的任何单一构件,从最简单的BroadcastReceiver到最复杂的活动,在由系统创建之前,都会首先创建应用类对象。这意味着必须让应用类的onCreate方法运行得尽可能快。

2.4.3 访问应用
对于所有的广播接收方、服务、活动和内容提供方,合适的父类都会提供给它们一个名为getApplication的方法。如果清单文件中指定了一个应用类对象,那么,getApplication被调用时会返回一个指向该对象的指针。既然已经声明、创建了这个类,访问它就非常简单,调用getApplication方法,把返回的对象映射到一个指针实例上即可。如下所示:

SampleApplication myApplication = (SampleApplication) getApplication(); 就是这样,可以把公共的数据成员或上下文敏感的方法添加到自己的应用类对象中,所有的构件可以通过一个调用访问同一个对象,如下所示: public class SampleApplication extends Application{ public String username; public void onCreate(){ super.onCreate(); } } 要访问新添加的变量,只要映射到此前列出的对象上。如下所示: public void onCreate(Bundle bundle){ SampleApplication myApplication = (SampleApplication)getApplication(); myApplication.username = "sparks"; }

确保在应用类对象中的任何位置保存的任何数据都是相关数据,因为为应用类对象分配存储空间和初始化的时间耗费可能会成为影响启动时间的因素。

原文链接:https://yq.aliyun.com/articles/100425
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章