对android的理解_深入理解 android 卷iii 7.3 深入理解导航栏 - CSDN
  • 认识Android

    2019-03-09 14:30:59
    一、发展历史 目前Android(4.0)以上的系统已经占据了超过98%以上的市场份额。 2003年10月,Andy Rubin等人一起创建了Android公司。...… 随后几年谷歌相继推出Android(2.1)、Android(2.2)、Android(2...

    初心

    Android爱好者(菜鸟)一枚,初入Android世界,将在自己所学的写作博客,加深自己的理解。
    一来希望加深自己Android的认识
    二来希望对游览到此文章的同学有所帮助

    注:

    当然,路过大牛,若有什么建议,望留下你的脚步(评论),给予支持与鼓励,谢谢!!

    一、发展历史

    目前Android(4.0)以上的系统已经占据了超过98%以上的市场份额。
    2003年10月,Andy Rubin等人一起创建了Android公司。
    2005年8月,谷歌收购,Andy Rubin继续负责Android项目
    2008年9月,谷歌正式发布Android(1.0)系统
    … 随后几年谷歌相继推出Android(2.1)、Android(2.2)、Android(2.3)
    2011年2月,谷歌发布Android(3.0),该系统版本是专门为平板电脑设计的(较为失败的版本)
    2011年10月,谷歌发布Android(4.0),该版本适用于手机和平板电脑,不再差异化
    2014年Google I/O大会上,谷歌推出Android(5.0)。
    ART运行环境替代Dalvik虚拟机,
    同时提出Material Design的概念来优化应用的界面设计,
    推出Android Wear、Android Auto、Android TV系统,进军可穿戴设备、汽车、电视等全新领域(史上版本改动最大)
    2015年Google I/O大会上推出Android(7.0),加入多窗口模式功能

    二、Android系统架构

    重要:
    1.Linux内核层
    Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动
    如:显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。
    2.系统运行库层
    这一层通过一些C/C++库来为Android系统提供了主要的特性支持。
    如:SQLite库提供了数据库的支持
    OpenGL/ES库提供了3D绘图的支持
    Webkit库提供了游览器内核的支持
    同时在这一层还有Android运行时库,他主要提供一些核心库,能够允许开发者使用Java语言编写Android应用
    Android运行时库包含Dalvik虚拟机(5.0系统之后改为ART运行环境),它似的每个Android应用都能运行在独立的进程中,并且拥有一个自己的Dalvik虚拟机实例
    相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况做了优化处理
    3.应用框架层
    这一层主要提供了构建应用程序时可能用到的各种API。
    4.应用层
    所有安装在手机上的应用程序都属于这一层。
    如:系统自带的联系人、短信等程序

    三、Android应用开发特色:

    1、四大组件
    (1)活动(Activity):活动是所有Android应用程序的门面,凡是在应用中你看到的东西,都是放在活动中的。
    (2)服务(Service):服务在后台运行,即使用户退出了应用,服务任然是可以继续运行的。
    (3)广播接收器(Broadcast Receiver):用来接收来自各处的广播信息。比如电话、短信等,同样可以向外发出广播信息。
    (4)内容提供器(Content Provider):为应用程序之间提供数据共享。比如读取系统电话簿的联系人,需要内容提供器来实现。
    2、丰富的系统控件
    Android系统为开发者提供了丰富的系统控件,使我们可以很轻松编写出漂亮的界面
    3、SQLite数据库
    Android系统自带了轻量级、运算速度极快的嵌入式关系型数据库。支持SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便。
    4、强大的多媒体
    Android系统还提供了丰富的多谋体服务,如音乐、视频等,这一切你都可以在程序中通过代码控制。
    5、地理位置定位
    Android手机都内置GPS。

    四、我的第一个Android项目

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    五、项目目录解析

    Project模式结构
    任何一个新建的项目都会默认使用Android模式的项目结构,这不是项目的真实的目录结构,而是被Android Studio转换过的。我们需要切换到Project模式结构下:
    (1).gradle和idea
    两个目录下放置的都是Android Studio自动生成的一些文件,无需关心,不要去修改。
    (2)app
    项目中的代码、资源都放在该目录下,我们开发工作基本也是在该目录下。
    (3)gradle
    目录包含lgradle wrapper的配置文件。
    (4).gitignore
    将指定的目录或文件排除在版本控制之外
    (5)Androids.iml
    iml文件是所有Intellij IDEA项目都会产生的一个文件(Android Studio是基于IntelliJ IDEA开发的)
    (6)build.gradle
    项目全局gradle配置文件
    (7)gradle.properties
    全局gradle配置文件
    (8)gradlew和gradlew.bat
    命令行界面执行gradle命令。gradlew是在Linux或Mac系统中使用。gradlew.bat在Windows系统中使用
    (9)local.properties
    用于本机Android SDK路径
    (10)settings.gradle
    指定项目中所有引入的模块。
    在这里插入图片描述
    开发目录app:
    (1)buile
    编译时自动生成的文件。
    (2)libs
    项目中使用的第三方jar包存放目录
    (3)androidText
    用来编写Android Test测试用例的。
    (4)java
    存放Java代码的目录
    (5)res
    存放项目使用到的所有图片,布局,字符串等资源;drawable(图片),layout(布局),values(字符串)
    (6)AndroidManifest.xml
    Android项目的配置文件,四大组件都需在这个文件里面注册
    (7)test
    用来编写Unit Test测试用例的。对项目进行自动化测试的另一种方式
    (8).gitignore
    app模块内指定目录或文件排除在版本控制之外。
    (9)app.iml
    IntelliJ IDEA项目自动生成的文件
    (10)bulid.gradle
    app模块的gradle构建脚本
    (11)proguard-rules.pro
    指定项目代码的混淆规则。
    在这里插入图片描述

    展开全文
  • 对Android 系统的理解

    2017-07-11 11:23:06
    Android采用层次化系统架构,官方公布的标准架构如下图所示。 Android由底层往上分为4个主要功能层, 分别是linux内核层(Linux Kernel), 系统运行时库层(Libraries和Android Runtime), 应用程序架构层...

    Android采用层次化系统架构,官方公布的标准架构如下图所示。
    Android由底层往上分为4个主要功能层,
    分别是linux内核层(Linux Kernel),
    系统运行时库层(Libraries和Android Runtime),
    应用程序架构层(Application Framework)
    和应用程序层(Applications)

    这里写图片描述

    应用层:
    咱们平常app开发的层次 用java 编写的应用程序 和 服务等。

    应用框架层:
    应用程序框架层提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发,方便重用组件,也可以通过继承实现个性化的扩展。
    应用程序框架层类库名称
    活动管理器(Activity Mananger) 管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口
    窗口管理器(Window Manager) 对所有开启的窗口程序进行管理
    内容提供器(Content Provider) 提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享
    视图系统(View System) 创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),还有可嵌入的web浏览器。
    通知管理器(Notification Manager) 使应用程序可以在状态栏中显示自定义的客户提示信息
    包管理器(Package Manager) 对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等。
    资源管理器(Resource Manager) 提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
    位置管理器(Location Manager) 提供位置服务
    电话管理器(Telephony Manager) 管理所有的移动设备功能
    XMPP服务 是Google在线即时交流软件中一个通用的进程,提供后台推送服务

    系统运行库层
    官方的系统架构图中,位于Linux内核层之上的系统运行库层是应用程序框架的支撑,为Android系统中的各个组件提供服务。系统运行库层由系统类库和Android运行时构成。
    (1) 系统类库
    Surface Manager
    Media Framework
    SQLite
    OpenGL|ES
    FreeType
    WebKit
    SGL
    Libc(bionic l ibc)
    SSL
    (2)Android NDK(Native Development Kit)
    即Android原生库,也十分重要。NDK为开发者提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。实际上,NDK提供了一系列从C或C++生成原生代码所需要的工具,为开发者快速开发C或C++的动态库提供方便,并能自动将生成的动态库和java应用程序一起打包成应用程序包文件,即.apk文件。
    注意,使用原生库无法访问应用框架层API,兼容性可能无法保障。而且从安全性角度考虑,Android原生库用非类型安全的程序语言C,C++编写,更容易产生安全漏洞,原生库的缺陷(bug)也可能更容易直接影响应用程序的安全性。
    (3) 核心库 和 Dalvik
    其中 核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。
    Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。然后 Dalvik 并不是传统的java虚拟机本质上也是不同的
    下班说下区别
    1.Dalvik基于寄存器,而JVM基于栈 栈是基于内存吧,寄存器在cpu里。 安利一下,cpu 中有寄存器 可以处理数据。 硬盘可以存储数据,好像这样就可以完成一个计算机的功能了吧,但是 寄存器数据太少, 早期的硬盘又是机械硬盘(现在的ssd 也没有内存快) 所以加了一个内存 用于 慢速 高速之间的媒介。我是这么理解的。 好了 元归正传
    所以 Dalvik 比 jvm 要快 , 然后 Dalvik 比 jvm 依赖 cpu架构。
    2.Dalvik经过优化,允许在有限的内存中同时高效地运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行,都拥有一个独立的Dalvik虚拟机实例。Android这种基于Linux的进程“沙箱”机制,是整个安全设计的基础之一
    3.Dalvik虚拟机从DEX(Dalvik Executable)格式的文件中读取指令与数据,进行解释运行。DEX文件由传统的,编译产生的CLASS文件,经dx工具软件处理后生成。
    4.Dalvik的DEX文件还可以进一步优化,提高运行性能。通常,OEM的应用程序可以在系统编译后,直接生成优化文件(.ODEX); 第三方的应用程序则可在运行时在缓存中优化与保存,优化后的格式为DEY(.dey文件)。

    硬件抽象层 hardware abstraction layer
    现在 一般会加上 硬件抽象层 hardware abstraction layer 他是对硬件设备的具体实现加以抽象
    能将android的应用框架层与linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。HAL规定了一套应用层对硬件层读写和配置的统一接口,本质上就是将硬件的驱动分为用户空间和内核空间两个层面;Linux内核驱动程序运行于内核空间,硬件抽象层运行于用户空间。

    linux kernel 层
    Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核
    Linux3.3内核中正式包括一些Android代码,可以直接引导进入Android。Linux3.4增添电源管理等更多功能,以增加与Android的硬件兼容性,使Android在更多设备上得到支持

    Android linux kernel 驱动模块(内核主要功能驱动硬件)
    Android电源管理(Power Ma nagement)
    低内存管理器(Low Memory Keller)
    日志(Android Logger)
    定时器(Anroid Alarm)
    物理内存映射管理(Android PMEM)
    Android定时设备(Android Timed device)
    匿名共享内存(Ashmem)
    Android定时设备(Android Timed device)
    Yaffs2文件系统
    Android Paranoid网络

    展开全文
  • 对Android理解

    2015-07-09 10:54:34
    前言写这篇文章是为了和大家描述下我对Android理解,同时会讲述下我后面的技术规划,希望能够大家有点参考价值。大家都想学好Android,那么怎么才能学好呢?这个真不好说,但是我可以和大家交流下我自己的心得,...

    前言

    写这篇文章是为了和大家描述下我对Android的理解,同时会讲述下我后面的技术规划,希望能够对大家有点参考价值。大家都想学好Android,那么怎么才能学好呢?这个真不好说,但是我可以和大家交流下我自己的心得,当然仅限应用层开发,因为我本身是侧重应用层开发的。

    知识的分类

    Android中有很多知识点,虽然说大部分知识点都不难,但是量很多,这就会给人一种很琐碎的感觉。在这种情况下就要对知识进行分类,我对Android知识的分类为:
    1. 基本知识点
    比如四大组件如何使用、如何创建Service、如何进行布局等。这类知识是需要熟练掌握的。
    2. 稍微深入的知识点
    比如AIDL、Binder、多进程、View的绘制流程、事件分发、消息队列等。这类知识对于高级开发者来说也是必须掌握的。
    3. 基本知识点的细节
    比如Activity的启动模式和标记位、Service同时处于start和bind状态时的停止问题、AsyncTask的同步异步问题以及使用时的限制等,这种问题还有很多。这类知识点,大家在开发过程中可以并不会去注意,这会导致一个问题,那就是开发应用没问题,但是在面试时面试官只要稍微问下细节或者特殊情况,就hold不住了。
    4. 系统核心机制
    比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式。这类知识对于高级开发者也是建议掌握的,因为它们可以让开发者理解Android的运行体系。
    5. 琐碎的知识点
    此类知识点我把它们定义为一些重要但是没有什么技术难度的问题,比如如何打开一个网页、如何打电话、如何发短信、如何定位、多点触控等,这类问题往往不好记忆,但是需要的时候去查一下就能立马搞定。

    类别 描述 开发者所需级别
    基本知识点 熟练掌握 初中级
    深入知识点 熟练掌握 中高级
    基本知识点的细节 掌握 高级
    系统核心机制 熟悉、掌握 高级、资深
    琐碎的知识点 了解 所有级别

    如何学习

    关于Android知识点的学习,无非就是看书、看官方文档,写代码等,这个是需要投入时间的。大家比较容易困惑的就是看Android源码,觉得“看不懂”,这是可以理解的。看源码的时候我们要侧重对流程的把握,刚开始时不要纠结太多的代码细节。有时候一遍看不懂的话就多看几遍,这样慢慢的就有眼熟了,眼熟后就能看懂了。另外看源码要讲究切入点,源码那么多从哪里开始下手呢?其实我建议先找一些自己感兴趣的切入点,比如大家有没有想过“Activity启动时,Activity的对象时在什么时候创建的?”这个问题,因为Java时面向对象的语言,所以Activity必须要创建一个对象,带着这个疑问去分析,一步步揭开谜团也是很有意思的事情。针对上面这个问题如何去分析Activity的对象到底是何时创建的呢,其实很简单,沿着Context的startActivity方法跟下去就好。采用这种方式去看源码,当看了一些主题后就会有一种贯穿的感觉,而这种感觉其实就是知识体系,这个知识体系是建立在Android的整体之上的。但是,不建议大家上去就看C层的源码,可等对源码有一定理解后再去看。关于琐碎的知识点,建议大家不好花费太多时间在上面,没有太大意义。

    要知其所以然

    在学习过程中,我们还要有质疑的精神。很多知识点我们掌握了,但是为什么是这样的,这个问题可能很多人并没有去想过。比如RemoteViews只支持有限的系统View,但是为什么呢?有没有想过?如果大家去想这个问题,那么就可以更好地理解RemoteViews的本质。再比如AsyncTask要求第一次访问这个类必须在UI线程,这一点我想大家都知道,但是为什么必须这样的?如果第一次访问AsyncTask在子线程会怎么样呢?带着这些疑问去思考去探索,那么你的技术档次就会更上一层楼。

    我的技术规划

    就我目前来说,我还有很多东西不太会,不管是Android还是其他技术。对于Android来说,源码我还需要更深入地看下去,同时我还需要去进一步学习Linux shell脚本以及Linux的内部实现,这样可以进一步地理解Android的实现,IOS我也需要稍微了解下,这样能够扩宽我的知识面,毕竟IOS也属于移动开发,但是我不会发很多精力去研究IOS,事实证明,“什么都擅长就等于什么都不擅长”,一个人要成为全栈工程师真的非常非常难,而且国内的招聘很多不需要全栈工程师,而且所谓的全栈工程师很可能在面试中就被淘汰(由于深度不够的原因)。我还会学习一些编译环境的搭建,比如Gradle、Gerrit等。按照这种规划去学习,我在Android就会达到一定深度并且有了Linux内核知识的支撑,然后了解IOS开发,同时还能搭建环境啥的,至于C、C++、Web开发之类的知识点,我在学校时就有初步的了解,这样一来,知识的广度和深度我都有,我认为应该是不错的规划。

    展开全文
  • 我们很多人对Android理解只限于Android应用andriod系统很少去了解,所以Android应用的学习每个人都有不同的看法吧!我个人而言想入门Android开发这行业必须先要学会Java,不要求要Java有多深的了解,只要...

         我们很多人对Android理解只限于Android应用对andriod系统很少去了解,所以对Android应用的学习每个人都有不同的看法吧!对我个人而言想入门Android开发这行业必须先要学会Java,不要求要对Java有多深的了解,只要对Java熟悉一定程度就能够步入Android行业了,因为在入门Android我们要了解Android的开发工具(比如IDE、SDK里面的一些工具)而会Java语言就是要学会用那些开发工具的基础,也是Android应用程序编程的基础。除了上面那些我们在刚放入Android的时候可以多看一些Android入门资料或书架,做到这些我觉得Android开发前期没有多大的困难了。

        Android 应用程序运行离不开系统,但Android系统是怎样去了解的呢!!!怎么才更容易去理解呢?这也是我们初学者遇到的难题,但是我们先要知道Android系统是基于

    Linux,而Linux主要是C语言来写的,相信大多人对C语言都不陌生吧?C语言是我们大学要学的课程,相信每个人或多或少对这门语言理解一些,会了C语言那可以浅入了解Linux,对Linux了解后那对Android系统就不会那么的陌生了,就是人们常说的Android的底层就是linux了,除了这些我们要注重的去了解Android ndk 可以说Android ndk 是Android应用层到底层桥梁,比如JNI,等一些库。当然这些是我对Android应用层到底层的一些个人见解,入门Android因人而异!!!


    展开全文
  • 深入理解Android 卷I 扫描完整版
  • 公众号 神农和朋友们的杂文集 0 ART虚拟机学习资源下载 ...device-innost.tar.gz:放在Android 7.0源码根目录/device目录下,用于为lunch命令添加innost_arm64-userdebug和innost_x86-userdebug两种...
  • 记得在前面的文章中,我带大家一起从源码的角度分析了Android中View的事件分发机制,相信阅读过的朋友View的事件分发已经有比较深刻的理解了。 还未阅读过的朋友,请先参考 Android事件分发机制完全解析,带你从...
  • 由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容。(出版社排版好的PDF版正在向出版社申请,到时候...
  • 1、引言 对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现: 自定义一个CustomView(extends View )类 编写values/attrs.xml,在其中编写styleable和item等标签元素 ... ps:如果你
  •  6月 26 日, Google Android 发布了 NDK ,引起了很多发人员的兴趣。 NDK 全称: Native Development Kit。下载地址为: http://developer.android.com/sdk/ndk/1.5_r1/index.html 。 2、误解 ...
  • 其实我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客开始,就零零散散在好多地方使用到了Android事件分发的知识。也有好多朋友问过我各种问题,比如:onTouch和onTouchEvent有什么区别,又该如何...
  • 《深入理解Android Java虚拟机ART》是一本以Android 7.0 ART JAVA虚拟机为目标的源码分析书籍。全书花费了将近3年时间, word原稿有1300多页,最终出版的书籍有900多页。定价看起来不便宜,16...
  • 今天,收到业内同行的消息:邓老师出新书啦——《深入理解Android:Java虚拟机ART》,主要内容包括:ART虚拟机源码分析、oat文件结构、GC、JVM执行原理、多线程管理、dex、JIT等虚拟机核心技术。全书近1000页,内容...
  • 由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容。第1章 开发环境部署本章主要内容:简单介绍本书...
  • Android学习路线指南

    2018-02-28 16:17:05
    看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程师的确不容易,一般需要进行...
  • 转载:...此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分。在一个特别讲究颜值的时代,本书分析了Android 4.2中WindowManagerService...
  • 经过两年的时间,终于完成对Android系统的研究了。Android是一个博大精深的系统,老罗不敢说自己精通了(事实上最讨厌的就是说自己精通神马神马的了,或者说企业说要招聘精通神马神马的人才),但是至少可以说打通了...
  • 《深入理解Android内核设计思想》适用于Android 4.3以上的版本。全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统等核心技术在Android中的实现原理。书...
  • 深入理解android卷II即将发布。本书关注Android Framework Java层。由于内容庞大,本书只能涵盖其中一部分内容。下图是各章节初审的目录。希望大家喜欢,欢迎各位提BUG。本书基于Android 4.0.1
  • 通过本书,读者不仅能对Android系统本身有更深入的理解,而且还能掌握分析大型复杂源代码的能力。   《深入理解Android:卷2》一共8章:第1章介绍了阅读本书所需要做的准备工作,包括Android4.0源码的下载和编译、...
1 2 3 4 5 ... 20
收藏数 281,045
精华内容 112,418
关键字:

对android的理解