学号 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.整体目录结构分析
![](https://images2018.cnblogs.com/blog/1333119/201807/1333119-20180718092500667-1221908708.png)

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》第一章学习总结的更多相关文章

  1. 20172327 2018-2019-1 《第一行代码Android》第二章学习总结

    学号 2017-2018-2 <第一行代码Android>第二章学习总结 教材学习内容总结 - 活动是什么: 活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件 ...

  2. 《第一行代码——Android》

    <第一行代码——Android> 基本信息 作者: 郭霖 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115362865 上架时间:2014-7-14 出版日期:2014 ...

  3. 历时一年,我的著作《第一行代码——Android》已出版!

    前言 事实上我当初决定開始写博客的想法挺简单的,认为自己搞技术这么多年了,总应该要留下点什么.既然没能写出什么出色的应用,那至少也要留下点文字分享给大家,以指引在我后面的开发人员们,毕竟我也从前辈们的 ...

  4. 第一行代码 Android 思维导图

    第一行代码 Android  思维导图

  5. 晒订单赢图灵图书,《第一行代码——Android》福利活动劲爆来袭!

    版权声明:本文出自郭霖的博客,转载必须注明出处. https://blog.csdn.net/sinyu890807/article/details/28863515 (已结束) 我的著作<第一 ...

  6. 第一行代码Android(第3版).pdf下载

    2020年人民邮电出版社出版的图书 <第一行代码Android(第3版)>是2020年4月人民邮电出版社出版的图书,作者是郭霖. 封面: 内容简介: <第一行代码 Android 第 ...

  7. 第一行代码 Android 第二版到货啦

    今日android第一行代码[第二版]已到,收获的季节到了 先看一下封面 书签: 以后就把空闲时间送给它吧 先来看一下本书的目录: 第1章 开始启程--你的第1行Android代码 第2章 先从看得到 ...

  8. Android 《第一行代码》 第二章练习代码 ActivityTest

    FirstActivity.java package com.example.activitytest; import android.app.Activity; import android.con ...

  9. 第一行代码 Android (郭霖 著)

    https://github.com/guolindev/booksource 第1章 开始启程----你的第一行Android代码 (已看) 第2章 先从看得到的入手----探究活动 (已看) 第3 ...

随机推荐

  1. 泛微云桥e-Bridge安装手册

    有时候不看官方文档进行配置,可能会出现奇奇怪怪的问题,SO转载一下官方文档,顺带学习. 想超长体验此软件,请搜索本博客内容,有破解方法,仅用来学习使用,顺带进行二次开发,请勿使用在商业用途,谢谢. 泛 ...

  2. 小米8如何root

    现身说法,实测有效,也踩坑很多. 0. 准备手机.数据线.windows系统的电脑.小米帐号,各一个. 手机需要装上sim卡:电脑需要能上网.最好是有wifi的环境,用来下载安装包. 注意提前备份数据 ...

  3. SQL 查询表的第一条数据 和 最后一条数据

    方法一: 使用TOP SELECT TOP 1 * FROM user; SELECT TOP 1 * FROM user order by id desc; 方法二: 使用LIMIT SELECT ...

  4. GreenDao3.2的简单使用

    Android -- GreenDao3.2的简单使用http://www.cnblogs.com/wjtaigwh/p/6394288.html https://github.com/greenro ...

  5. BZOJ5084[hashit]

    题解: 后缀自动机 我们可以通过建立trie 把询问变成询问一些点的并 把trie建立成SAM和广义SAM基本相同,就是在父亲和儿子之间连边 然后就变成了询问树链的并 我们可以发现答案=sigma d ...

  6. 在CentOS 7+ 安装Kubernetes入门(单Master)

    TL;DR; ***,***,***,重要的事情说三次.如果不会***,这篇文章就没有看下去的意义.作为一个技术人员如果不愿意折腾,很难有所作为.作为一个单纯的技术人员,最好把心思放在技术上,做到真正 ...

  7. python多线程之t.setDaemon(True) 和 t.join()

    0.目录 1.参考2.结论    (1)通过 t.setDaemon(True) 将子线程设置为守护进程(默认False),主线程代码执行完毕后,python程序退出,无需理会守护子线程的状态.    ...

  8. python基础——函数

    1.内置函数的调用: 可以在官方网站查找内置函数及说明,也可以通过help(abs)函数查看相应的信息. https://docs.python.org/3/library/functions.htm ...

  9. scrapy笔记

    1.关于请求url状态码重定向问题: from scrapy import Request handle_httpstatus_list = [404, 403, 500, 503, 521, 522 ...

  10. python词云

    词云图 from os import path from PIL import Image import numpy as np import matplotlib.pyplot as plt fro ...