1.Android的组成

1.1 布局-Layout

布局(Layout)定义各个屏幕是什么样的

典型的Android应用往往由一个或多个屏幕组成。可以使用布局来定义外观,也就是定义各个屏幕看上去是什么样。布局通常由XML定义,可能包含一些GUI组件,如按钮、文本域和标签。

布局告诉Android:你的应用的屏幕分别是什么样的

1.2 活动-activity

布局只定义了应用的外观。还要编写Java代码来定义应用应当做些什么。有一种特殊的Java类,称为活动(activity),活动会决定要使用哪个布局,并告诉应用如何对用户做出响应。举个例子,如果布局中包含一个按钮,就需要在活动中写Java代码来定义按下这个按钮时要做些什么。

活动定义应用应该做什么

1.3 额外的资源

除了Java代码和布局,Android应用通常还需要额外的资源,如图像文件和应用数据。可以为应用增加你需要的任何额外的文件。
Android应用实际上就是某些目录中的一组文件。构建应用时,所有这些文件会“捆绑”在一起构成一个应用在你的设备上运行。

资源可能包括声音和图像文件

2.Android平台剖析

Android平台由很多不同的组件构成,包括一些核心应用(如 通讯录),一组API以及大量支持文件和库,这些API可以帮助你控制应用外的外观和行为。

  • 应用:Android提供了一组核心应用,如通讯录(Contacts),日历(Calendar),地图(Maps)以及浏览器
  • 应用框架:构建你的应用时,同样可以使用核心应用所用的API。可以使用这些API控制你的应用的外观和行为。
  • :应用框架底层有一组C和C++库。可以通过框架API访问这些库
  • Android运行时环境:提供了一组核心库,实现了Java编程语言的大部分功能。所有Android都在自己单独的进程中运行。
  • Linux内核:最底层是Linux内核。Android依赖这个内核提供驱动以及核心服务(如安全和内存管理)。

3.Android SDK

Android设备并不会运行.class和.jar文件。实际上,为了提高速度和电池性能,Android设备会使用自己的优化格式表示编译代码。因此,不能使用常规的Java开发环境,还需要特殊的工具将你的编译代码转换成另一种Andorid格式,还要把他们部署到一个Android设备上,以便应用运行后进行调试。

所有这些都将作为Android SDK的一部分。下面来看看包括什么。

Android软件开发包(Software Development Kit,SDK)包含开发Android应用所需的库和工具:

4.Android项目知识点

> 项目创建是在电子书的N50

4.1 API层次

在Android Studio中创建项目时,需要选择一个Minimum SDK,指的是API层次。一般选择API层次为API 15,这说明它能够在大多数设备上运行。

Minimum SDK:最低SDK,是指你的应用支持的最低版本。应用将在有这个版本或更高版本API的设备上运行。如果设备的API版本比它低,你的应用就无法运行。

Android版本有一个版本号和一个代号。版本号提供了Android的准确版本(比如5.0),代号则是一个更为通用的“友好”的名字,可能涵盖多个Android版本(比如Lollipop)。API层次是指应用使用的API版本。举例来说,对应Android 5.0版本的API层次就是21。

4.2 活动和布局概览

所有Android应用都是由屏幕构成的一个集合,每个屏幕则由一个活动和一个布局组成

<Android应用可以理解为一个或多个屏幕的叠加,通过返回键或者其他案件,实现屏幕的逻辑切换与显示>

活动是用户可以完成的一个确定的事情。比如,可能有一个活动要写emial,照相或者查找某个联系人。活动通常与一个屏幕关联,用Java编写。

布局描述了屏幕的外观。布局写为一个XML文件,它会告诉Android如何组织各个不同的屏幕元素。

下面来详细分析活动和布局如何共同创建一个用户界面:

  1. 设备启动你的应用,创建一个活动对象
  2. 这个活动对象指定一个布局
  3. 活动告诉Android在屏幕上显示这个布局
  4. 在设备上显示包含这个布局的用户界面
  5. 活动通过运行应用代码对交互做出相应
  6. 活动更新
  7. 用户将在设备上看到更新后的显示

4.3 Android项目在AS中的文件构成

4.4 在模拟器中运行应用

从AndroidStudio中运行应用,从Run之后发生了什么。

编译、打包、部署和运行

选择Run选项时并不只是运行你的应用。它还会处理运行应用所需的所有预备任务:

1.Java源文件编译为字节码

2.创建一个Android应用包或者APK文件,APK文件包含编译的Java文件以及应用所需的所有库和资源

3.假设模拟器还未运行,会启动模拟器并加载AVD

4.一旦启动模拟器并加载AVD,将APK文件上传到AVD并安装

5.AVD启动应该关联的主活动

4.5 运行HelloWorld应用发生的过程

运行应用时发生了:

1.AndoridStudio启动模拟器,加载AVD,并安装应用。

2.应用启动时,从MainActivity.java创建一个活动对象

3.这个活动指定它要使用布局activity_main.xml

4.活动告诉Android在屏幕上显示布局。另外会显示文本“HelloWorld”

:提到创建一个APK文件时,java源代码会编译为字节码并且增加到APK。我想你是说,它会编译为Java字节码,是吧?

:没错,不过还不止如此。在Android上情况稍有些不同。Android上最大的区别是你的代码并不真正在常规的Java虚拟机中运行。它会在Android运行时环境(Androidruntime,ART)中运行,如果在较老的设备上,则会在ART的前身Dalvik上运行。这说明,可以编写你的Java源代码,用Java编译器把它编译为.class文件,然后这些.class文件会集中到一个DEX格式的文件中,这是更简短、更高效的字节码。然后ART运行DEX代码。在Android中,每个应用都在自己的进程中运行。如果使用常规的JVM,就会需要更多的内存。

4.6 布局文件解析:把字符串值放在strings.xml中而不是硬编码写在代码中

首先来看自动生成的activity_main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/></RelativeLayout>

其他内容基本都知道了,来看点不知道的。在标签<TextView>中的text属性,可以直接选择硬编码的方式编写文本内容:

 <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World"/>

而是使用 上面的编写方式,下面来进行这么写的好处。

android:text="@string/hello_world"

第一部分:@string

告诉Android要从一个字符串资源文件查找文本值。此处,AndroidStudio为我们创建了一个字符串资源文件,名为 strings.xml,这个文件位于 app/src/main/res/values文件夹。

第二个部分 hello_world

表示Android要查找名为hello_wold的资源的值。

“@string/hello_world”表示 查找名为hello_world的字符串资源,并使用相关的文本值。

这么做的主要原因:本地化

假设你创建了一个应用,它可能成为Google Play Store上的一个热门应用。不过,你不希望仅限于某一个国家或语言,可能还想让它国际化,能适应很多不同的语言。
如果将文本值分开来放在strings.xml中,就可以使这些问题的处理容易得多。不必在各个不同的活动和布局文件中改变硬编码的文本值,完全可以把strings.xml文件替换为一个国际化的版本。
把strings.xml用作为维护文本值的一个集中的资源,还可以更容易地全局修改整个应用使用的文本。如果因为公司改名,你的老板要求改变应用中的文字,那么只需要修改strings.xml就可以了.

:问:应用怎么知道要使用哪一个资源文件呢?

:把默认的英语字符串资源文件正常放在app/src/main/res/values文件夹中,法语资源文件放在一个新的文件夹中,名为app/src/main/res/values-fr。如果设备设置为法语,它就会使用applsrclmainlres/values-fr文件夹中的字符串。如果设备设置为任何其他语言,则会使用applsrclmain/res/values中的字符串。

Android之所以能把strings.xml识别为一个字符串资源文件,存在关键的两点:

  • 这个文件位于文件夹app/src/main/res/values中

这个文件夹中的XML包含简单之,如字符串和颜色。

  • 这个文件有一个<resources>元素,它包含一个或多个<string>元素

文件本身的格式指示了这是一个包含字符串的资源文件。<resources>元素告诉Android这个文件包含资源,<string>元素则标识各个字符串资源。

这说明并不需要将你的字符串资源文件命名为strings.xml;如果愿意,完全可以取其他名字,或者还可以将这个文件拆分为多个文件。

每个名/值对有以下形式:

<string name="string_name">string_value</string>

此处的string_name是字符串的标识符,string_value是字符串值本身。

布局可以使用以下代码获取字符串的值:

5.知识点总结

  1. Android的版本包括版本号、APl层次和代号。
  2. Android Studio是IntelliJ IDEA的一个特殊版本,集成了Android软件开发包(AndroidSoftwareDevelopment Kit,SDK)和gradle构建系统。
  3. 典型的Android应用由活动、布局和资源文件组成。
  4. 布局描述了应用是什么样,位于app/src/main/res/layout文件夹。
  5. 活动描述了应用做什么,以及如何与用户交互。你写的活动放在app/src/main/java文件夹中。
  6. strings.xml包含字符串名/值对。这个文件用于将文本值与布局和活动相分离,从而支持本地化。
  7. AndroidManifest.xml包含有关应用自身的信息。这个文件位于app/src/main文件夹。
  8. AVD是一个Android虚拟设备。它运行在Android模拟器中,可以模仿真正的Android物理设备。
  9. APK是一个Android应用包。就像是对应Android应用的一个JAR文件,包含应用的字节码、库和资源。在设备上安装应用时就是要安装APK。
  10. Android应用使用Android运行时环境(ART)在单独的进程中运行。
  11. RelativeLayout用于将GUI组件放在布局的相对位置上。Textview元素用于显示文本。

1 入门:投身新领域相关推荐

  1. 用事实说话,我是如何快速入门一个新领域的

    记得很久之前听罗胖的音频,讲到如何快速入门一个新领域,基本方法就是:集中火力,大量阅读该领域内相关书籍,最好阅读书籍涵盖该领域的正方和反方. 最近换了新工作,进入一个新领域--跨境支付,在实战中实践了 ...

  2. 关于快速学习一项新技术或新领域的一些个人思维习惯与思想总结

    前言 本文尝试谈谈笔者对于学一项新技术.入门一个新领域的一些看法和方法.在本文会谈到一些思维习惯层面的.思想层面的内容,最后会给一个从零入门学习pytorch的方法作为例子. 写在前面的话 我写文章有 ...

  3. Cell | 小基因开启微生物组研究新领域——大规模鉴定微生物基因组编码的小蛋白质...

    撰文 | 617 责编 | 兮 近年来,随着测序技术的发展,微生物组研究成为一个新热点.借助宏基因组测序技术,我们在人体的不同部位发现了多种多样的微生物,但是微生物究竟通过什么机制发挥作用影响表型呢? ...

  4. 史道术器|一种快速切入新领域的学习框架

    今天分享一个鹅厂技术leader的成长心得,快速切入新领域的内功心法. 正文 11年正式入职以来,恰好赶上移动互联网叠加技术爆发的一个上升期:个人也跟着这个大趋势做了很多不同领域的学习和工作:大致可以 ...

  5. 蓝宝石b75主板支持服务器内存,入门主板新标杆 蓝宝石冰晶B75全解析

    谁还考虑H61?蓝宝石冰晶B75袭来 作为一款专为中小企业.网吧和普通家庭用户量身打造的产品,B75最大的特色在于原生支持SATA 3.0和USB3.0.相对于上一代的H61.B65,无论在核心架构. ...

  6. 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...

    杨净 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 2010年,他因吸毒.杀人被捕入狱,被判有期徒刑25年. 在狱中,他靠自学数学打发时间. 没有计算机.没有老师,单靠手写.以及数学教材 ...

  7. 阿里巴巴云原生应用安全防护实践与 OpenKruise 的新领域

    作者 | 王思宇(酒祝) 来源|阿里巴巴云原生公众号 得益于 Kubernetes 面向终态的理念,云原生架构天然具备高度自动化的能力.然而,面向终态的自动化是一把"双刃剑",它既 ...

  8. 通域消化内镜Android患者版,市中心医院消化内科Ⅰ病区开创超声内镜治疗新领域...

    胃底静脉曲张常见于肝硬化患者,易反复出现消化道出血症状,严重时危及生命.由于大部分肝硬化患者肝功能储备和手术耐受性差,内镜下组织胶黏合剂注射治疗是常用治疗方法.但对于合并较大直径的分流道患者来说,组织 ...

  9. 英特尔大手笔花钱寻觅未来 但新领域变数太多难以成为支柱

    在个人电脑多年下滑.智能手机处理器全面失败之后,英特尔已经成为一家没有未来可言的危险公司.在过去几年中,英特尔展开了频繁的收购,面向自动驾驶.汽车芯片.无人机.物联网等新领域布局,不过媒体注意到,这些 ...

最新文章

  1. elastic date时区问题解决办法
  2. C#中使用 SendMessage 向非顶端窗体发送组合键
  3. Codeforces Round #395 (Div. 2) - A
  4. PC如何接管手机的双因子身份验证 靠的是英特尔的CPU
  5. Android中shape的解析
  6. react使用link跳转传递参数_React-Typescript之路由跳转(使用this.props.history.push)
  7. android版 点击下载,自动点击器最新版
  8. 其他用户登陆到这台计算机,要登录到这台远程计算机,您必需拥有这台计算机上的‘终端服务器用户访问’权限解决方法...
  9. 设置java路径_关于java路径设置
  10. c++ static 关键字总结
  11. python logging打印终端_python standard package:logging
  12. Kali 更新失败 签名无效
  13. Android 属性动画 常用方法 与 插值器 Interpolator
  14. IntelliJ IDEA运行内存设置
  15. 子网掩码计算题与解析
  16. android 模拟器 派派,派派怎么在电脑上玩?派派电脑版使用教程
  17. 主Module(app)直接跳转到子Module,子Module跳转到主Module(app)要借助Router
  18. 浅析 PHP 官方自动化测试方法
  19. FineBI与FineReport对比 1
  20. msvcr120.dll丢失怎样修复?msvcr120.dll文件修复方法

热门文章

  1. 美女,僧人,腐尸,菩萨美女
  2. 人工蜂群算法(Artificial Bee Colony, ABC)MATALAB代码详细解析
  3. 稀里糊涂地被评为博客之星的候选人了,那就麻烦大家帮忙投个票吧~
  4. Clion 调教记录
  5. 【蓝桥杯经典数学题】杨辉三角形
  6. Java指导书练习题——抽象类
  7. PCB线路板塞孔工艺的那些事儿~
  8. matlab 删除workspace,MATLAB命令中清空workspace的是
  9. 【SDX12】高通SDX12 NatType功能分析及实现
  10. python使用xlwings库操作Excel常见操作