《Android应用开发》——2.4节应用类
本节书摘来自异步社区《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"; }
确保在应用类对象中的任何位置保存的任何数据都是相关数据,因为为应用类对象分配存储空间和初始化的时间耗费可能会成为影响启动时间的因素。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《iOS组件与框架——iOS SDK高级特性剖析》——第6章,第6.4节以编程方式选择媒体
本节书摘来自异步社区《iOS组件与框架——iOS SDK高级特性剖析》一书中的第6章,第6.4节示以编程方式选择媒体,作者 【美】Kyle Richter , Joe Keeley,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.4 以编程方式选择媒体iOS组件与框架——iOS SDK高级特性剖析经常需要以定制方式让用户选择音乐,这包括创建自定义音乐选择界面或自动搜索艺术家或专辑。本节讨论以编程方式选择音乐所需的步骤。 要在不使用MPMediaPickerController的情况下获取歌曲,需要分配并初始化一个MPMediaQuery实例。MPMediaQuery相当于一个存储器,包含大量指向MPMediaItem的引用,而每个MPMediaItem都表示一个要播放的歌曲或音轨。 示例应用包含两个实现MPMediaQuery的方法。第一个是playRandomSongAction:,它在用户的音乐库中随机选择一个音轨,并使用现成的MPMusicPlayerController播放它。要以编程方式选择音乐,首先需要分配并初始化一个MPMediaQuery实例。 6.4.1 随机...
- 下一篇
《CCNA ICND2(200-101)认证考试指南(第4版)》——导读
本节书摘来自异步社区《CCNA ICND2(200-101)认证考试指南(第4版)》一书中的目录,作者 【美】Wendell Odom,更多章节内容可以访问云栖社区“异步社区”公众号查看 目 录 前言 入门 第1部分 LAN交换第1章 定义生成树协议 1.1 “我已经知道了吗?”小测试 1.2 基础内容 1.3 考前准备 第2章 配置生成树协议(STP)第3章 LAN交换故障排除第1部分 考前复习第2部分 IPv4路由选择第4章 第1部分IPv4路由选择故障排除第5章 第2部分IPv4路由选择故障排除第6章 创建冗余第一跳路由器第7章 虚拟专用网第2部分 考前复习第3部分 IPv4选择路由协议第8章 实现IPv4 OSPF第9章 理解EIGRP概念第10章 实现IPv4 EIGRP第11章 IPv4路由选择协议故障排除第3部分 考前复习第4部分 广域网(WAN)第12章 点对点WAN第13章 理解帧中继概念第14章 实现帧中继第15章 识别其他WAN类型第4部分 考前复习第5部分 IPv6第16章 IPv6路由选择故障排除第17章 实现IPv6 OSPF第18章 实现IPv6 EIGR...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路