20172327 2018-2019-1 《第一行代码Android》第一章学习总结
学号 2018-2019-1 《第一行代码Android》第一章学习总结
教材学习内容总结
| - Android系统架构: |
1.Linux内核层
Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,Wi-Fi驱动,电源管理等。
2.系统运行底层
- 通过一些C/C++库来为Android系统提供了主要的特性支持
| 库名 | 功能 |
|---|---|
| SQLite库 | 提供数据库的支持 |
| OpenGL/ES库 | 提供3D绘图支持 |
| Webkit库 | 提供了浏览器内核的支持 |
- Android运行时库(主要提供一些核心库,允许开发者使用Java语言来编写Android应用。)
Dalvik虚拟机(5.0系统后改为ART运行环境) 使每个Android应用都能运行在独立进程当中,并拥有一个自己的Dalvik虚拟机实例。
3.应用框架层
主要提供了构建应用程序时可能用到的各种API,Android自带的核心应用就是使用这些API完成的,开发者也可以用这些API来构建自己的应用程序。
4.应用层
应用程序都是属于这一层,联系人,短信,游戏等都是。

总结:
- 1 Android的系统架构采用分层架构的思想,架构清晰,层次分明,协同工作。
- 2 Android的系统架构不仅从宏观上认识了Android系统,同时,也给我们的学习与实践指明了方向。若是从事Android应用开发,那应该研究Android的应用框架层和应用程序层;若是从事Android系统开发,那应该研究Android的系统库和Android运行时;若是从事Android驱动开发,那应该研究Android的Linux内核。总之,找准切入点,实践出真知。
| - Android应用开发特色: |
1.四大组件
- 活动(Activity)
Android应用程序的门面,凡是你在应用中看到得东西,都是放在活动中。 - 服务(service)
无法看到,在后台默默运行,退出应用后,服务仍然是可以继续运行的。 - 广播接收器(Broadcast Receiver)
允许你的应用接收来自各处的广播消息,如电话,短信等。 - 内容提供器(Content Provider)
程序之间共享数据。
2.丰富的系统控件
- Android为开发者提供了丰富的系统控件,可以使我们轻松的编写出漂亮的界面。你也可以定制自己的控件。
3.SQLite数据库
- 轻量级,运行速度快,嵌入式,关系型数据库。支持SQL语法,还可通过Android封装好的API进行操作,让储存和读取数据更方便。
4.强大的多媒体
- 音乐,视频,录音,拍照,闹钟等,均可通过代码控制。
5.地理位置定位
- 地理位置定位应该是一个亮点,Android手机内置GPS,所以走到哪都可以定位到自己的位置,发挥出创意十足的应用,结合地图功能,LBS (通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在地理信息系统(外语缩写:GIS、外语全称:Geographic Information System)平台的支持下,为用户提供相应服务的一种增值业务。)这一领域潜力无限。
| - 开发环境构建工具: |
1.JDK
- JDK是Java语言的软件开发工具包,它包含了Java的运行环境,工具合集,基础类库等内容。
2.Android SDK
- Android SDk 是谷歌提供的Android开发工具包,在开发Android程序时,我们需要通过引入该工具包,来使用Android相关的API。
3.Android Studio
- 2013年谷歌推出的一款官方的IDE工具,不在以插件形式存在,Android Studio在开发Android程序方面远比以前用的Eclipse强大和方便的多。
| - 分析Android程序: |
创建完毕以后,将项目结构模式切换成Project
1.整体目录结构分析

gradle.properties:项目全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
说明:除了APP目录外,其他目录都是自动生成的。APP目录的下的内容才是我们的工作重点。
2.APP目录结构分析

说明:程序的默认运行效果就是不写一行代码,直接部署到模拟器上的运行效果。
3.定义主活动
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
//这两句代码表示MainActivity是主活动,点击图标后首先运行此活动
</intent-filter>
</activity>
说明: 这段代码表示对MainActivity活动进行注册,没有在AndroidManifest.XML中注册的活动是不能使用的。
4.主活动分析
package com.example.zy.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
//活动被创建必须要调用下述的方法
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
说明:
1.我们之前说了应用程序中所有的可以看到的东西都是放到活动中的,所以首先必须要继承自活动。
2.主活动的继承关系:

3.super.onCreate(savedInstanceState)就是调用父类的onCreate构造函数,时用来创建活动的,savedInstanceState是保存当前Activity的状态信息。
5.HelloWorld来自哪?
其实在Android程序的设计讲究逻辑和视图分类,因此是不推荐在活动中直接编写界面的,更加通用的方法是在布局文件中编写界面,然后在活动中引入进来。
<?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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.zy.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
说明: 我们看到其中有一个TextView,这是Android的一个控件,用于在布局中显示文字的。
6.详解res目录

说明:之所以有这么多的mipmap开头的文件夹,其实主要是为了让程序能够更好地兼容各种设备。
打开values目录下的strings.xml文件:
<resources>
<string name="app_name">My Application</string>
</resources>
这里定义了一个应用程序名的字符串,我们可以使用以下两种方式引用它:
- 在代码中通过: ◇ R.string.app_name
- 在XML文件通过: ◇ @string/app_name
7.详解build.gradle
在AS中,我们是通过Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于 XML的繁琐配置。
I.最外端的build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
allprojects {
repositories {
jcenter()
}
}
说明:
- 两处repositories中都使用了jcenter(),jcenter是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这些配置,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
- dependencies 使用了classpath 声明了一个Cradle插件。
II.APP目录下的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.zy.myapplication"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes { //用于指定生成安装文件的相关配置,一般有release和deubug两项。
release {
minifyEnabled false //是否对代码进行混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //代码的混淆规则
}
}
}
dependencies { //用于指定当前项目的所有依赖关系
compile fileTree(dir: 'libs', include: ['*.jar'])
//上着为本地依赖关系,将libs目录下*jar包添加到构建路径当中
testCompile 'junit:junit:4.12'
//声明测试用例库的
compile 'com.android.support:appcompat-v7:25.2.0'
//这是一个标准的远程依赖库格式,Gradle在构建项目时会检查是否有此库的缓存,如果没有则联网下载.添加依赖库声明:compile project(':helper'),将helper依赖关系加入.
}
说明:
- 第一行引用了一个插件,com.android.application'是一个应用程序模块,可以直接运行,com.android.library是一种库模块,只能作为代码库依附于别的应用程序模块来运行。
- 接下来是一个大的Android闭包,这个闭包可以配合项目构建的各种属性。
compileSdkVersion 25 :指定使用Android6.0系统的SDK编译。
buildToolsVersion :指定项目构建工具的版本。 - 接下来是一个defaultConfig闭包,可以对项目的更多细节进行配置。
applicationId :执行项目的包名
minSdkVersion 15 项目最低兼容的Android系统版本
targetSdkVersion 25 你在该秒版本上做过了充分的测试,系统会为你的应用程序启动一些最新的功能和特性。
versionCode 1 项目版本号
versionName "1.0" 项目的版本名
| - 使用Android的日志工具Log : |
1.Android中的日志工具类是Log,这个类中提供了如下5个方法来供我们打印日志。
- Log.v():用于打印哪些最为繁琐、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种
- Log.d():用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级
- Log.i():用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮你分析用户行为数据。对应级别into,比debug高一级
- Log.w():用于打印程序中的警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方,对应级别warn比into高一级
- Log.e():用于打印程序中的错误信息,比如程序进入到catch语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现了严重的问题,必须尽快修复。对应级别error,比warn高一级
- 一共就五个方法,但是每个方法还会有不同的重载。
2.在MainActivity中,在onCreate()中添加一行代码Log.d("MainActivity", "onCreate execute");,然后运行。通过打印信息可以看出,打印日志的内容、tag名等等都可以看到。
Log.d方法中传入了2个参数,第一个参数是tag,一般传入当前的类名就可以了,主要用于对打印信息进行过滤;第二个参数是msg,即具体打印的内容。
3.为什么使用Log而不是用System.out
- 这个方法在Eclipse中可以通过输入saso然后按下代码键,这种方法就自动出来了。不过遗憾的是Android Studio中不支持这种输入方式了。并且,它有很多缺点:日志打印不可控制。打印时间无法确定,不能添加过滤器,日志没有级别区分。
4.log的快捷输入和过滤器设置
- 快捷输入可以通过输入logi然后按下Tab自动生成,其他几类类似00
- 过滤器目前只有3个。
- Show only select application表示只显示当前选中程序的日志;Firebase是谷歌公司提供的一个分析工具,我们可以不用管它。
- No Filters相当于没有过滤器,会把所有的日志显示出来
- Android Studio可以添加自定义的过滤器。
教材学习中的问题和解决过程
代码调试中的问题和解决过程
代码托管
结对及互评
其他(感悟、思考等,可选)
学习进度条
参考资料
20172327 2018-2019-1 《第一行代码Android》第一章学习总结的更多相关文章
- 20172327 2018-2019-1 《第一行代码Android》第二章学习总结
学号 2017-2018-2 <第一行代码Android>第二章学习总结 教材学习内容总结 - 活动是什么: 活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件 ...
- 《第一行代码——Android》
<第一行代码——Android> 基本信息 作者: 郭霖 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115362865 上架时间:2014-7-14 出版日期:2014 ...
- 历时一年,我的著作《第一行代码——Android》已出版!
前言 事实上我当初决定開始写博客的想法挺简单的,认为自己搞技术这么多年了,总应该要留下点什么.既然没能写出什么出色的应用,那至少也要留下点文字分享给大家,以指引在我后面的开发人员们,毕竟我也从前辈们的 ...
- 第一行代码 Android 思维导图
第一行代码 Android 思维导图
- 晒订单赢图灵图书,《第一行代码——Android》福利活动劲爆来袭!
版权声明:本文出自郭霖的博客,转载必须注明出处. https://blog.csdn.net/sinyu890807/article/details/28863515 (已结束) 我的著作<第一 ...
- 第一行代码Android(第3版).pdf下载
2020年人民邮电出版社出版的图书 <第一行代码Android(第3版)>是2020年4月人民邮电出版社出版的图书,作者是郭霖. 封面: 内容简介: <第一行代码 Android 第 ...
- 第一行代码 Android 第二版到货啦
今日android第一行代码[第二版]已到,收获的季节到了 先看一下封面 书签: 以后就把空闲时间送给它吧 先来看一下本书的目录: 第1章 开始启程--你的第1行Android代码 第2章 先从看得到 ...
- Android 《第一行代码》 第二章练习代码 ActivityTest
FirstActivity.java package com.example.activitytest; import android.app.Activity; import android.con ...
- 第一行代码 Android (郭霖 著)
https://github.com/guolindev/booksource 第1章 开始启程----你的第一行Android代码 (已看) 第2章 先从看得到的入手----探究活动 (已看) 第3 ...
随机推荐
- 泛微云桥e-Bridge安装手册
有时候不看官方文档进行配置,可能会出现奇奇怪怪的问题,SO转载一下官方文档,顺带学习. 想超长体验此软件,请搜索本博客内容,有破解方法,仅用来学习使用,顺带进行二次开发,请勿使用在商业用途,谢谢. 泛 ...
- 小米8如何root
现身说法,实测有效,也踩坑很多. 0. 准备手机.数据线.windows系统的电脑.小米帐号,各一个. 手机需要装上sim卡:电脑需要能上网.最好是有wifi的环境,用来下载安装包. 注意提前备份数据 ...
- SQL 查询表的第一条数据 和 最后一条数据
方法一: 使用TOP SELECT TOP 1 * FROM user; SELECT TOP 1 * FROM user order by id desc; 方法二: 使用LIMIT SELECT ...
- GreenDao3.2的简单使用
Android -- GreenDao3.2的简单使用http://www.cnblogs.com/wjtaigwh/p/6394288.html https://github.com/greenro ...
- BZOJ5084[hashit]
题解: 后缀自动机 我们可以通过建立trie 把询问变成询问一些点的并 把trie建立成SAM和广义SAM基本相同,就是在父亲和儿子之间连边 然后就变成了询问树链的并 我们可以发现答案=sigma d ...
- 在CentOS 7+ 安装Kubernetes入门(单Master)
TL;DR; ***,***,***,重要的事情说三次.如果不会***,这篇文章就没有看下去的意义.作为一个技术人员如果不愿意折腾,很难有所作为.作为一个单纯的技术人员,最好把心思放在技术上,做到真正 ...
- python多线程之t.setDaemon(True) 和 t.join()
0.目录 1.参考2.结论 (1)通过 t.setDaemon(True) 将子线程设置为守护进程(默认False),主线程代码执行完毕后,python程序退出,无需理会守护子线程的状态. ...
- python基础——函数
1.内置函数的调用: 可以在官方网站查找内置函数及说明,也可以通过help(abs)函数查看相应的信息. https://docs.python.org/3/library/functions.htm ...
- scrapy笔记
1.关于请求url状态码重定向问题: from scrapy import Request handle_httpstatus_list = [404, 403, 500, 503, 521, 522 ...
- python词云
词云图 from os import path from PIL import Image import numpy as np import matplotlib.pyplot as plt fro ...