zoukankan      html  css  js  c++  java
  • 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.整体目录结构分析 ![](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可以添加自定义的过滤器。

    教材学习中的问题和解决过程

    代码调试中的问题和解决过程

    代码托管

    结对及互评

    其他(感悟、思考等,可选)

    学习进度条

    参考资料

  • 相关阅读:
    react的路由以及传值方法
    三连击
    给网页添加鼠标样式
    单词统计(续)
    个人课程总结
    构建之法阅读笔记02
    构建之法阅读笔记01
    第十六周总结
    计算最长英语单词链
    第十五周总结
  • 原文地址:https://www.cnblogs.com/mrf1209/p/9327394.html
Copyright © 2011-2022 走看看