"浅谈Android"第一篇:Android系统简介

 近来,看了一本书,名字叫作《第一行代码》,是CSDN一名博主写的,一本Android入门级的书,比较适合新手。看了书以后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的学习,知识杂乱无章,没有条理和总结。所以,想一想我是否能够尝试的写些文章,来对本身以前学过的知识和工做经验进行概括和整理,整理出本身的知识体系呢。因此,就有这篇文章的诞生,若是其中理解不到位的地方,望园里的兄弟姐妹给予指出错误,咱们共同讨论,一块儿进步。我一直相信一句话,好东西要分享,不断地分享,直至温暖整个世界。
 目前安排是一周一篇文章,由于从前期每篇文章主题的思考,素材收集,代码验证,思惟导图设计,是很耗时间的,若是碰到问题没解决的话,就顺延到下一周,宁愿速度慢点,但要保证写出来的东西是原创的,对人有帮助才行。
 这篇的主题是”什么是Android“,关于Android的内容,从如下几点来介绍:
  • Android系统架构
  • Andorid已发布的版本
  • Android应用特点
  • Android开发环境
  • Android程序结构
  • Logcat工具
  • Hello World

1,Android系统架构

  有图有真相:
  
 这是Android系统架构图,够一目了然了吧,Android大体能够分为四层架构,五块区域。
  • Linux内核层(Linux Kernel)
  • 系统运行层
  • 应用框架层(Application Framework)
  • 应用层(Applications)
  1.1,Linux内核层
  Android系统是基于Linux 2.6内核的,这一层为Android设备的各类硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、WiFi驱动、电源管理等。
 
  1.2,系统运行层
    这一层经过一些C/C++库来为Android系统提供了主要的特性支持,好比SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供浏览器内核的支持等。同时,在这一层还有Android运行时库,它提供了一些核心库,能容许开发者使用Java来编写Android应用。其中,关键是Dalvik虚拟机,它使得咱们每个Android应用都能运行在独立的进程当中,而且拥有一个本身的Dalvik虚拟机实例,相比Java虚拟机(JVM),Dalvik是专门为移动设备定制的,它对手机内存、CPU性能有限等状况作了优化处理。
 
  1.3,应用框架层
    这一层主要提供了构建应用时可能用到的API,Android自带的一些核心应用程序就是使用这些API完成的,开发者能够经过使用这些API构建本身的应用程序。好比有活动管理器、View系统。内容提供器、通知管理器等。
 
  1.4,应用层
    全部安装在手机上的应用程序都是属于这一层的,好比系统自带的联系人、短信等程序,或者咱们从Google Play上下载的程序,包括咱们本身开发的应用程序。

2,Android已发布的版本

  有图有真相:
 
 
 从图中咱们能看到,Android最新版已经5.0了,名叫Android 5.0 Lollipop,中文简称为”棒棒糖“。自从2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最先的版本,随后的几年,谷歌以惊人的速度不断更新发布Android系统,2.一、2.二、2.3系统推出使Android占据了大量的市场。2011年2月,谷歌发布了Android 3.0系统,这个系统版本是专门为平板电脑设计的,但也是Android为数很少比较失败的版本,推出以后一直不见什么转机,市场份额也少的可怜。不过很快,在同年10月,谷歌又发布了Android 4.0系统,这个系统版本再也不对手机和平板进行差别化区分,既能够应用在手机上也能够应用在平板上,除此以外,还引入了很多特性。
 那么Android目前市场使用状况如何呢?如图所示:
  
  图片来源自维基百科
  自2009年12月起的Android用户版本分析。直至2014年5月,Android的Jelly Bean为最被普遍使用的版本,在全部用户中佔了61%。

 3,Android应用特点

  Android主要有什么特点呢,有如下几个方面来体现:html

  • 四大组件
  • 丰富的系统控件
  • SQLite数据库等持久化技术
  • 地理位置定位
  • 强大的多媒体
  • 传感器
  3.1,四大组件
    什么是四大组件?分别是活动(Activity)、服务(Service)、广播接收器(BroadCast Receiver)和内容提供器(Content Provider)。其中活动(Activity)就是Android应用程序中看得东西,也是用户打开一个应用程序的门面,而且与用户交互的界面,比较高调。服务(Service),则比较低调了,一直在后台默默的付出,即便用户退出了,服务仍然是能够继续运行的。广播接收器(BroadCast Receiver),则容许你的应用接收来自各处的广播消息,好比电话、短信等,能够根据广播名称不一样,作相应的操做处理,固然了, 除了能够接受别人发来的广播消息,自身也能够向外发出广播消息,自产自销。内容提供器(Content Provider),则为应用程序之间共享数据提供了可能,好比你想要读取系统电话本中的联系人,就须要经过内容提供器来实现。
 
    3.2,丰富的系统控件
    Android系统为开发者提供了丰富的系统控件,咱们能够编写漂亮的界面,也能够经过扩展系统控件,自定义控件来知足自个人需求,常见控件有:TextView、Buttion、EditText、一些布局控件等。
 
    3.3,持久化技术
    Android系统还自带了SQLite数据库,SQLite数据库是一种轻量级、运算速度极快的嵌入式关系型数据库。它不只支持标准的SQL语法,还能够经过Android封装好的API进行操做,让存储和读取数据变得很是方便。
 
    3.4,地理位置定位
    移动设备和PC相比,地理位置定位是一大亮点,如今基本Android手机都内置了GPS,咱们能够经过GPS,结合咱们的创意,打造一款基于LBS的产品,是否是很酷的事情啊,再说,目前火热的LBS应用也不是空穴来风的,不过在天朝,由于可恶的GFW,只能用些本土化的地图API,好比百度地图、高德地图。要是哪天能用上大谷歌的地图,那才是高大上啊。
 
    3.5,强大的多媒体
    Android系统提供了丰富的多媒体服务,好比音乐、视频、录音、拍照、闹铃等,这一切均可以在程序中经过代码来进行控制,让你的应用变得更加丰富多彩。
 
    3.6,传感器
    Android手机中内置了多种传感器,好比加速传感器、方向传感器,这是移动设备的一大特色,咱们能够灵活地使用这些传感器,能够作出不少在PC上没法实现的应用。好比“微信摇一摇"_你懂得,“搜歌摇一摇”等功能。

4,Android开发环境

  开发环境搭建所须要的软件,配置等攻略,相信你们网上搜一搜,这类文章太多了。这里只强调重要几个工具:Android SDK、Eclipse、ADT。数据库

  4.1,Android SDK
    Android SDK谷歌提供的Android开发工具包,在开发Android程序时,咱们须要引用该工具包,里面包含了开发Android应用程序的API。
 
    4.2,Eclipse
    开发Java应用程序的神器,最好用IDE工具之一,特色是开源、超强的插件功能、可支持多种语言开发。固然除此以外,谷歌也推出了Android Studio,专门针对Android程序定制的,但由于Android Studio才刚推出不久,不太稳定,毕竟新工具问题仍是比较多的,Eclipse被应用已经很成熟了,网上各类关于Eclipse疑难杂症的解决方案不少,相比Android Studio就比较少了。
 
    4.3,ADT
    ADT全称叫作"Android  Development Tools",是谷歌提供的一个Eclipse插件,用于在Eclipse提供一个强大的、集成的Android开发环境。

5,Android程序结构

  有图有真相:浏览器

  

 从图中看是否是一目了然,那么接下来就一一讲解吧。性能优化

   5.1,src
   毫无疑问,src目录是放置咱们全部Java代码的地方,它在这里的含义和普通Java项目下的src目录是彻底同样的。
 
   5.2,gen
   这个目录里的内容都是自动生成的,主要有一个R.Java文件,你在项目中添加任何资源都会在其中生成一个相应的资源ID,这个文件永远不要手动去修改它。
 
   5.3,assets
   这个目录里主要能够存放一些随程序打包的文件,在你的程序运行时能够动态读取到这些文件的内容。另外,若是你的程序中使用到了WebView加载本地网页的功能,全部网页相关的文件也都存放在这个目录下。
 
   5.4,bin
   这个目录页不须要过多的关注,它主要包含了一些在编译时自动产生的文件。固然,会包括一个编译好的安装包,后缀为.apk的文件。
 
   5.5,libs
   若是你的项目中使用到了第三方的jar包,就须要把这些jar包放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
 
   5.6,res
   这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的全部图片、布局、字符串等资源都要存放在这个目录下,前面提到的R.Java中的内容也是根据这个目录下的文件自动生成的。固然这个目录下还有不少子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。
 
   5.7,AndroidManifest.xml
   这是你整个Android项目的配置文件,你在程序中定义的全部四大组件都须要在这个文件中注册。另外还能够在这个文件给应用程序添加权限声明,也能够从新指定你建立项目时指定的程序最低兼容版本和目标版本。
 
   5.8,proguard-project.txt
   在发布你的程序时候,有些apk文件容易被人反编译,因此此时这个文件就发挥做用了,用来混淆你的程序代码,让别人不那么容易看到源代码。
 
   5.9,project.properties
   指定了编译程序时候所用的SDK版本

6,Logcat工具

  有图有真相:微信

  

    日志在任何项目的开发过程当中都会起到很是重要的做用,在Android项目中若是你想要查看日志则必需要使用Logcat工具。
    Android提供了一个日志工具类是Log,总共有个等级,级级递增。

     6.1,Log.v()
     这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是Android 日志里面级别最低的一种。
架构

    6.2,Log.d()
    这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别 debug,比 verbose 高一级。
   
    6.3,Log.i()
    这个方法用于打印一些比较重要的数据,这些数据应该是你很是想看到的,能够帮你分析用户行为的那种。对应级别 info,比 debug 高一级。

    6.4,Log.w()
    这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别 warn,比 info 高一级。
        
    6.5,Log.e()
    这个方法用于打印程序中的错误信息,好比程序进入到了 catch 语句当中。当有错误信息打印出来的时候,通常都表明你的程序出现严重问题了,必须尽快修复。对应级别 error,比 warn 高一级。
 
    小提醒:定制本身的日志工具

     好比,你正在编写一个比较庞大的项目,期间为了方便调试,在代码的不少地方都打印了大量的日志。最近项目已经基本完成了,可是却有一个很是让人头疼的问题,以前用于调试的那些日志,在项目正式上线以后仍然会照常打印,这样不只会下降程序的运行效率,还有可能将一些机密性的数据泄露出去。
    那该怎么办呢,难道要一行一行把全部打印日志的代码都删掉?显然这不是什么好点子,不只费时费力,并且之后你继续维护这个项目的时候可能还会须要这些日志。所以,最理想的状况是可以自由地控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线了以后就把日志屏蔽掉。框架

    那么咱们能够自定义一个日志工具类,对Android原生的工具类封装下。
public class LogUtil {

    public static final int VERBOSE=1;
    public static final int DEBUG=2;
    public static final int INFO=3;
    public static final int WARN=4;
    public static final int ERROR=5;
    public static final int NOTHING=6;
    
    public static final int LEVEL=VERBOSE;            //发布新版本时候 等级为6
    
    public static void v(String tag,String msg){
        if(LEVEL <=VERBOSE){
            Log.v(tag, msg);
        }
    }
    
    public static void d(String tag,String msg){
        if(LEVEL <=DEBUG){
            Log.d(tag, msg);
        }
    }
    
    public static void i(String tag,String msg){
        if(LEVEL <=INFO){
            Log.i(tag, msg);
        }
    }
    
    public static void w(String tag,String msg){
        if(LEVEL <=WARN){
            Log.w(tag, msg);
        }
    }
    
    public static void e(String tag,String msg){
        if(LEVEL <=ERROR){
            Log.e(tag, msg);
        }
    }
}

    能够看到,咱们在 LogUtil 中先是定义了 VERBOSE、 DEBUG、 INFO、 WARN、 ERROR、NOTHING 这六个整型常量,而且它们对应的值都是递增的。而后又定义了一个 LEVEL 常
量,能够将它的值指定为上面六个常量中的任意一个。接下来咱们提供了 v()、 d()、 i()、 w()、 e()这五个自定义的日志方法,在其内部分别调用了 Log.v()、 Log.d()、 Log.i()、 Log.w()、 Log.e()这五个方法来打印日志,只不过在这些自定义的方法中咱们都加入了一个 if判断,只有当 LEVEL 常量的值小于或等于对应日志级别值的时候,才会将日志打印出来。ide

    这样就把一个自定义的日志工具建立好了,以后在项目里咱们能够像使用普通的日志工具同样使用 LogUtil,
    好比打印一行 DEBUG 级别的日 志就能够这样写:LogUtil.d("TAG", "debug log");
    打印一行 WARN 级别的日志就能够这样写:LogUtil. w("TAG", "warn log");
    而后咱们只须要修改 LEVEL 常量的值,就能够自由地控制日志的打印行为了。好比让LEVEL 等于 VERBOSE 就能够把全部的日志都打印出来,让 LEVEL 等于 WARN 就能够只打印警告以上级别的日志,让 LEVEL 等于 NOTHING 就能够把全部日志都屏蔽掉。使用了这种方法以后,刚才所说的那个问题就不复存在了,你只须要在开发阶段将LEVEL 指定成 VERBOSE,当项目正式上线的时候将 LEVEL 指定成 NOTHING 就能够了。

7,Hello World

    好了,说了这么多,这些只是一些理论的东西,要想更深刻的理解,必需要本身动手作Demo,咱们能够去建立一个Hello World程序试试,用Eclipse+ADT帮咱们建立的默认项目就是Hello World.
 

阅读扩展

源于对掌握的Android开发基础点进行整理,罗列下已经总结的文章,从中能够看到技术积累的过程。
1,Android系统简介
相关文章
相关标签/搜索