安卓第四页 概念漫游(下)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

安卓第三夜 概念漫游(上)中,我介绍了安卓最基本的功能单元和Intent的连接方式。在这个骨架之上,我们可以进一步增加一些与开发密切相关的重要概念。

Context

一个应用是由多个Activity和Service这样的功能单元组成。一个应用共享有一个Application Context对象。在功能单元内部,可以用特定的方法来调用该对象。正如名字所表示的,Context对象记录了应用所处的环境。如同新生儿的功能单元,可以通过查询Context对象,了解当前的周边状况,比如屏幕的尺寸。这个Context对象还中包含了许多应用级别的功能,比如加载应用资源。一个Context对象与对应应用共存。它在应用运行之初即创立,直到应用结束运行。整个过程中,应用的功能单元就好像共同沐浴在Application Context这个温水池中,随时享受着沐浴带来的舒适。

Context

除了一个应用中唯一的Application Context对象,应用运行过程中还可能创建其他的Context对象。Activity类和Service类都继承自Context类,所以Activity对象和Service对象也都是Context对象,我把它们称为Activity Context和Service Context。这两种Context对象与对应的Activity对象和Service对象有相同的生命周期。它们为内部的对象,提供了周边信息和功能。比如在创建一个UI元素View的时候,就需要把Activity Context对象作为参数传给该View。在Activity结束时,对应的Activity Context对象也会销毁。在Activity和Service内部,可以通过this来调用对应的Activity Context和Service Context对象。Activity Context对象提供了启动一个新的Activity的功能,而Service Context对象则没有UI相关的功能。

不同类型的Context对象在功能上有许多重叠的地方,比如都可以启动一个Service。但要注意它们生命周期的不同。Application Context对象有最长的生命周期。过度依赖Application Context对象,可能导致内存泄露。所以,原则上要尽可能的使用Application Context和Service Context对象来实现Context类的功能。

Life Cycles

View

Activity是一个屏幕界面。界面上总是有各种各样的视图元素,比如一个按钮,一行文字和一个输入栏。每一种视图元素在安卓中表示为一个View类,比如Button类,TextView类和EditText类。安卓的视图元素很多样,就连图片和网页也都有对应的视图元素。除了具体的视图元素,View类还有一个ViewGroup的子类。多个View对象可以归属于一个ViewGroup对象,而ViewGroup对象往往定义了下属视图元素的布局关系,比如自上而下线性排列,或者格点式排列。通过这样的归属关系,一个Activity的所有视图元素和抽象布局构成一个视图树。这棵树就包含了整个屏幕的视图信息。

视图树

在安卓设计中,我们往往要给View元素增加各种属性,以控制它们的文字、尺寸、大小、颜色等信息。对于ViewGroup来说,它有多个子类,代表了不同的布局方式。比较常见的有线性布局LinearLayout和相对布局RelativeLayout。线性布局是沿着一个方向线性排列视图元素,而相对布局则定义了视图元素和母View对象或兄弟View对象的相对位置关系。通过嵌套使用多种布局,我们可以创造出复杂的界面布局方式。

在一个Activity中,我们可以通过新建View对象的方式,用编程的手段来创建视图树。视图元素的属性可以通过View对象的方法来调整。但更常用的方法是定义一个XML文件。利用XML天然的树形结构来表示一个视图树。一个XML节点对应一个View对象,View对象的属性可以记录在节点的属性中。 安卓可以理解这样的XML定义,并把XML节点实例化为内存中的对象,也就是Layout Inflate的过程。比如下面的XML记录:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

它表示了一个线性布局,包含了一个文字视图和一个按钮。

从3.0之后,安卓引入了Fragment。Fragment与Activity一样,包含了一个视图树。由于一个Activity可以包含多个Fragment,也就是多个视图树,这就增加了界面设计的灵活性。毕竟,在Fragment以前,Activity只能包含一个视图树,比较死板。有了Fragment之后,程序员可以根据Activity的当前状况,来选择所包含的视图树,比如在手机屏幕显示一个Fragment,而在平板上显示两个Fragment。这样,视图的设计也可以重复利用不用不同的设备了。

Fragment的运行方式与Activity类似,也是在状态转换中调用onStart()等方法。

Resource

在安卓开发中,有可能需要一些静态资源,比如图片、字符串、XML文件等等。这些资源被存储在安卓项目res/下不同的文件夹中。

不同资源分类存放。我们上面提到用XML来定义布局,它们就保存在layout下。drawable*的文件夹中包含不同清晰度的图片,而字符串存放在values下的strings.xml中。在安卓项目中,我们可以用ID或文件名,来引用对应的资源。

总结

Context: 环境信息和功能

View: 视图

Resource: 静态资源

欢迎继续阅读“Java快速教程”系列文章

安卓第四页 概念漫游(下),布布扣,bubuko.com

时间: 2024-11-25 07:03:21

安卓第四页 概念漫游(下)的相关文章

python中基于descriptor的一些概念(下)

@python中基于descriptor的一些概念(下) 3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3.4 Descriptor调用方法 4. 基于Descriptor实现的功能 4.1 property 4.2 函数和方法,绑定与非绑定 4.3 super 5. 结尾 3. Descriptor介绍 3.1 Descriptor代码示例 class RevealAccess(object):   

Bootstrap历练实例:标签页内的下拉菜单

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Bootstrap历练实例:标签页内的下拉菜单</title> <meta charset="utf-8" /> <meta name="vie

安卓第四天笔记-Sqlite

安卓第四天笔记-Sqlite 1.数据库的创建运行与更新 1.1.创建一个类继承SqliteOpenHelper 1.2.创建构造方法 /** * 数据库创建类 * @author 刘楠 * * 2016-2-20上午10:04:34 */ public class DbSqliteOpenHelper extends SQLiteOpenHelper { /** * * @param context 上下文 * @param name 数据库的名字如: students.db * @param

10天学安卓-第四天

原文:10天学安卓-第四天 继续昨天的学习. 昨天我们根据取得的天气数据新建了一个视图用来显示各项内容,那么今天我们就把数据显示出来吧!!! 这里我们要把数据和视图联系起来,那么就用到了适配器-Adapter,Android给我们提供了很多Adapter,这里我们用到了BaseAdapter. BaseAdapter(1) 右键点击src/com.demo.weather,选择 New > Class,按照下图填写: 选择[Finish]后,我们就新建了一个BaseAdapter的子类,打开 W

PowerDesigner教程系列(四)概念数据模型

目标:本文主要介绍如何定义实体的主.次标识符. 一.标识符标识符是实体中一个或多个属性的集合,可用来唯一标识实体中的一个实例.要强调的是,CDM中的标识符等价于PDM中的主键或候选键.每个实体都必须至少有一个标识符.如果实体只有一个标识符,则它为实体的主标识符.如果实体有多个标识符,则其中一个被指定为主标识符,其余的标识符就是次标识符了. 二.如果定义主.次标识符1)选择某个实体双击弹出实体的属性对话框.在Identifiers选项卡上可以进行实体标识符的定义.如下图所示 2)选择第一行“主标识

20165315 第四次考试课下补做

20165315 第四次考试课下补做 一.相关知识点的总结 泛型 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构 泛型类声明 可以使用class 名称<泛型列表>声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据 使用泛型类声明对象 泛型类声明和创建对象时,类名后多了一对"<>",而且必须要用具体的类型替换"<>"中的泛型 链表

SpringCloud从入门到进阶(四)——生产环境下Eureka的完全分布式部署

内容 由于前两节的内容我们知道,开启了preferIpAddress后,Eureka的伪分布式部署会提示replica不可用.这一节我们讲解如何在生产环境下部署完全分布式的Eureka集群,确保开启了preferIpAddress后replica的可用性. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 Java开发人员 节点信息: 节

42款免费精美求职简历word模板,四页求职简历模板,含自荐信

42款免费精美求职简历word模板,四页求职简历模板,含自荐信,个人免费简历,适用于各行各业. 声明:该简历模板仅用于个人欣赏使用,请勿用于商业用途,谢谢. 可以直接通过该地址快速下载:https://yunpan.360.cn/surl_yLH8UV2w6K6 部分word格式简历封面预览: 原文地址:https://www.cnblogs.com/fanhaozzu/p/10865204.html

15款免费艺术院校学生求职简历word模板,四页求职简历模板,含自荐信

15款免费艺术院校学生求职简历word模板,艺术唯美简历模板,四页求职简历模板,含自荐信.声明:该简历模板仅用于个人欣赏使用,请勿用于商业用途,谢谢. 可以直接通过该地址快速下载:https://yunpan.360.cn/surl_yLPp6Q63gmI 部分word格式简历封面预览: 原文地址:https://www.cnblogs.com/fanhaozzu/p/10927531.html