icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础内容

    • Android入门

      • Android程序的执行入口
      • Android概况
        • 1. Android常见概念
        • 2. Android系统架构
          • Applications
          • Application FrameWork
          • Libraries-Android Runtime
          • Linux Kernel
        • 3. 虚拟机DVM
        • 4. Android版本
        • 5. Android应用开发特色
          • 四大组件
          • 丰富的控件系统
          • SQLite数据库
          • 地理定位系统
          • 强大的多媒体
          • 传感器
      • AS项目常见问题
      • Android项目打包过程
      • Manifest功能清单文件
      • 调试工具的使用
      • Android中的属性长度单位
      • 接口回调-监听器
    • ADB

  • AndroidCore

  • Android UI

  • Components

  • Fragment

  • 网络操作

  • 异步机制

  • 数据存储

  • 学习笔记

  • 自定义View

  • View事件体系

  • Android
  • 基础内容
  • Android入门
iqqcode
2021-04-27
目录

Android概况

# 1. Android常见概念

SDK : Software-Development-Kit, 软件开发工具包

NDK : Native-Development-Kit,Android原生开发工具包,允许使用C/C++语言来实现应用程序的部分功能

JNI :JNI 是指Java原生接口,是Java调用 C/C++的规范,同时JNI也是JVM规范的一部分

【Google官方解释】:

JNI 是指 Java 原生接口。它定义了 Android 从受管理代码(使用 Java 或 Kotlin 编程语言编写)编译的字节码与原生代码(使用 C/C++ 编写)互动的方式。JNI 不依赖于供应商,支持从动态共享库加载代码,虽然有时较为繁琐,但效率尚可。

🍳Android-NDK与JNI基础概述 (opens new window)

# 2. Android系统架构

1

image-20201123143504210

# Applications

Applications-应用程序层

负责与用户直接交互。我们常用的APP都位于这一层,系统内置的应用程序以及非系统级的应用程序都属于应用层

# Application FrameWork

Application FrameWork-应用框架层

提供开发Android应用程序所需的一系列类库,高度封装直接调用。安卓开发主要是在第二层和第三层,通过各种的框架来实现我们的Application。

# Libraries-Android Runtime

Android的系统运行库层。

Libraries-系统库层

Libraries包含了9个子库,系统库为组件提供服务。

如:SQLite 库提供了数据库的支持,OpenGL|ES 库提供了3D 绘图的支持,Webkit 库提供了浏览器内核的支持等。


Android Runtime-安卓运行时

  • Core Libraries : 核心库
  • Dalvik Virtual Machine : 虚拟机

Android Runtime里的Core Libraries就相当于Java的JDK,是运行android应用程序所需要的核心库;Dalvik Virtual Machine类比于JVM,是Google专为Android开发的-运行android应用程序所需的虚拟机,对其生命周期进行管理。相较于Java 虚拟机,Dalvik 是专门为移动设备定制的,它针对手机内存、 CPU 性能有限等情况做了优化处理。

# Linux Kernel

Linux Kernel-Linux内核

Linux Kernel:Android其实就是一个操作系统,其底层是基于Linux Kernel 2.6 的,这一层主要完成的是操作系统所具有的功能,层为Android 设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、WiFi 驱动、电源管理等。


# 3. 虚拟机DVM

1. 实现的差别

  • Dalvik:基于寄存器,编译和运行更快
  • JVM:基于栈,编译和运行稍慢

2. 字节码的区别

  • Dalvik:执行.dex格式的字节码,是对.class文件进行压缩后产生的,文件变小
  • JVM:class文件

3. 运行环境的却别

  • Dalvik:一个应用启动都运行一个单独的虚拟机,运行在一个单独的进程中
  • JVM:只能运行一个实例,所用应用都运行在同一个JVM中

# 4. Android版本

甜点为代号的各个安卓版本:

image-20201123110133974

  • 1.5 Cupcake(纸杯蛋糕)
  • 1.6 Donut(甜甜圈)
  • 2.2 Froyo(冻酸奶)
  • 2.3 Gingerbread(姜饼)
  • 3.x Honeycomb(蜂巢)
  • 4.0 Ice Cream Sandwich(冰激凌三明治)
  • 4.1 Jelly Bean(果冻豆)
  • 4.4 KitKat(奇巧巧克力)
  • 5.0 Lollipop(棒棒糖)
  • 6.0 Marshmallow(棉花糖)
  • 7.0 Nougat(牛轧糖)
  • 8.0 Oreo(奥利奥)
  • 9.0 Pie (派)
  • 10.0 Android 10

Google从Android 10开始,版本号将不再以甜点命名;目前Android 10 的命名就位Android 10


# 5. Android应用开发特色

# 四大组件

🎨Activity(活动)

所有Android应用程序的门面,为用户所展示的页面。所有的应用程序的流程都是运行在Activity中,是开发者遇到最繁琐、最基本的模块。一个Android应用是由多个Activity组成,多个Activity之间的应用可以进行相互的跳转。

Java程序从main()函数开始。很类似的,Android 系统初始化它的程序是通过Activity中的 onCreate()回调的调用开始的。存在有一序列的回调方法来启动一个活动,同时有一序列的方法来关闭活动,如下面的活动声明周期图所示:

activity

回调 描述
onCreate() 这是第一个回调,在活动第一次创建时调用
onStart() 这个回调在活动为用户可见时被调用
onResume() 这个回调在应用程序与用户开始可交互的时候调用
onPause() 被暂停的活动无法接受用户输入,不能执行任何代码。当前活动将要被暂停,上一个活动将要被恢复时调用
onStop() 当活动不在可见时调用
onDestroy() 当活动被系统销毁之前调用
onRestart() 当活动被停止以后重新打开时调用


📦Service(服务)

服务是一个后台运行的组件,执行长时间运行且不需要用户交互的任务。即使应用被销毁也依然可以工作。

如我一遍在后台放着网抑云听歌,一边在刷着B乎。虽然我在和B乎的Activity交互,但是歌曲并没有停止;其实就是由播放音乐的Service在控制着。

服务基本上包含两种状态:

状态 描述
Started Android的应用程序组件。如活动,通过startService()启动了服务,则服务是Started状态。一旦启动,服务可以在后台无限期运行,即使启动它的组件已经被销毁。
Bound 当Android的应用程序组件通过bindService()绑定了服务,则服务是Bound状态。Bound状态的服务提供了一个客户服务器接口来允许组件与服务进行交互,如发送请求,获取结果,甚至通过IPC来进行跨进程通信。


🔊Broadcast Receiver(广播接收器)

是应用程序之间传输消息的机制。广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,应用同样也可以向外发出广播消息。


📫Content Provider(内容提供者)

内容提供者组件:通过请求-从一个应用程序向其他的应用程序提供数据。

Android虽然是开源的,但是对数据的保护是很严密的。除了放在SD卡上的数据和该应用所持有的数据库、文件等内容,其他是不允许其他应用直接访问的。Android当然不会将每个应用做成孤岛,它为所有应用准备了一扇窗,就是Content-Privider



# 丰富的控件系统

Android 系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。我的理解是类似于很多前端的组件,如BootStrap、Element UI、Ant Design、Vant UI、Laiui等等这些封装好的组件提供我们使用,加快开发效率。

# SQLite数据库

Android 系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便。

# 地理定位系统

Location Based Services定位服务。用百度地图 Android SDKS开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。

# 强大的多媒体

Android 系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃等等,这一切都可以在程序中通过代码进行控制,让应用变得更加丰富多彩。

# 传感器

Android 手机中都会内置多种传感器,如加速度传感器、方向传感器等,这也算是移动设备的一大特点。通过灵活地使用这些传感器,可以做出很多在PC上根本无法实现的应用。


【参考内容】

[1] 菜鸟教程.Android 教程 (opens new window)

[2] 郭霖.《第一行代码》https://zhuanlan.zhihu.com/p/122968154

编辑 (opens new window)
#basic
上次更新: 2022/03/27, 22:58:50
Android程序的执行入口
AS项目常见问题

← Android程序的执行入口 AS项目常见问题→

最近更新
01
匿名内部类
10-08
02
函数式接口
10-08
03
ARouter-Kotlin踩坑
10-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×