深入Android系统基础知识及基本概念

深入Android系统基础知识及基本概念

Android应用程序的基本组成部分,包括Activities(活动)、Services(服务)、Broadcast receivers(广播接收器)和Content providers(内容提供者)。在深入讨论这些组件和Android操作系统之前,作者提出了先了解一下Android用户的操作行为。

Android手机上的应用程序列表以及与应用程序相关的基本操作。用户可以点击应用程序图标来打开应用程序,还可以使用导航栏中的图标在"返回"、"主屏幕"和"最近使用的应用程序"之间进行导航。

Android操作系统的技术方面

Android操作系统实际上是Linux的定制版本。与Linux中创建不同用户一样,每个应用程序实际上都是一个用户。每个应用程序都有自己的私有区域,可以通过权限进行访问。每个已安装的应用程序都有一个UID(用户ID)和GID(组ID):

  • UID:控制应用程序对文件、文件夹、资源等的访问。
  • GID:允许将特定一组用户分组在一起,组内的用户可以在权限内访问共享文件。

接下来,文章介绍了四个基本组件的作用:

  1. Activity(活动):Android应用程序的基本构建块,占据其所占用的所有空间,可以堆叠在彼此上面。

  2. Services(服务):后台进程,当需要另一个服务时会激活服务。服务可以提供给应用程序外部的组件使用,因此可以使该应用程序的一些基本功能对其他应用程序可用。

  3. Broadcast Receivers(广播接收器):类似于中断处理程序,当发生重要事件时触发以在应用程序中进行处理。在不处理特定事件时处于非活动状态。

  4. Content Providers(内容提供者):在想要从另一个应用程序中访问数据时使用。它可以检索文件或其他存储组件,通常依赖于SQLite。

最后,AndroidManifest.xml中定义应用程序中静态使用的基本组件,并解释了Android操作系统在启动应用程序时会检查清单,并根据需要打开必要的应用程序。当用户打开Android手机时,系统会显示一个包含应用程序图标的Activity,并且可以通过各种基本组件(如点击应用程序图标、通知等)访问应用程序。应用程序有与组件数量相同的入口点。

上图给出当用户点击应用程序图标时,Android系统的响应过程, 用户点击应用程序图标后,系统会调用启动器中的onClick()方法来响应。然后,Activity Manager调用startActivity()方法。在Android操作系统下,Activity Manager调用startViaZygote()方法。接着,Zygote(子进程孵化器)会分叉(fork)该应用程序以启动它,并将其传递给系统。

Activity Manager

  1. Activity Manager负责管理基本组件。在应用程序开发中,如果出现ANR(应用程序无响应)错误,通常是由Activity Manager引起的。此外,Activity Manager还处理Activity的生命周期、OOM(内存耗尽)和低内存情况。

  2. 当用户点击应用程序时,该应用程序可能已存在于后台栈中,也可能是首次启动。首次启动的应用程序会开始管理更多系统资源。

  3. 硬件有一定的容量,这个过程不能无限进行。系统需要在启动新组件/应用程序时终止或释放旧的应用程序或低优先级应用程序。为了防止用户检测到这些进程的终止,Android为组件提供了生命周期。系统通过生命周期回调(LifeCycle CallBacks)来管理这些组件的状态。

综上所述,这段内容描述了Android系统中用户点击应用程序图标后的操作流程,以及Activity Manager在处理应用程序和组件时的关键角色。

Android 内存管理

Android中的内存管理,包括Out Of Memory(OOM)和Low Memory两种结构。

  1. OOM内存管理: OOM实际上与Linux中的OOM相同。它创建了一个从-17到+15的评分系统来清理内存。评分越高,被OOM终止的可能性越大。评分是根据CPU时间、运行时间、内存大小等参数计算的。OOM在内存开始填满时开始起作用。

  2. Low Memory内存管理: Android开发人员希望更好地控制内存,因此他们创建了Low Memory结构。在Low Memory中,系统会在达到一定的阈值时触发。系统会保存正在运行的后台进程。随着阈值的增加,OOM会终止非关键的后台进程以及在这些阈值下保存的前台应用程序。

综上所述,这段内容说明了Android内存管理的两种结构:OOM和Low Memory。OOM根据评分系统终止进程,而Low Memory在达到阈值时触发,并保存正在运行的后台进程,以便更好地控制内存。

Zygote

Zygote是Android中的一个专用结构,它的功能和工作原理:

  1. Zygote是专门用于启动应用程序的结构:Zygote将所有应用程序共享的组件集中在一起,以统一它们并缩短它们的启动过程。它仅在需要启动新应用程序时处于活动状态,并准备了应用程序在运行时可能需要的资源。

  2. Zygote创建系统中的一个套接字:当它接收到一个应用程序启动请求时,Zygote会监听并分叉(fork)操作。分叉的好处在于应用程序可能需要的所有资源都可用且预加载。分叉操作实际上使用它们自己的副本,因此不管应用程序数量如何,资源的单个副本都保留在RAM中。

  3. Zygote首先启动的是System Server:它作为一个独立的进程运行。

此外,文章提到了Jetpack Compose是一个特殊情况。由于Jetpack Compose是一个独立的库,无法从Zygote中受益。因此,它从1.0版本开始使用Profile Installers。

Intent

Android中的Intent(意图)的作用和重要性:

  1. Intent允许组件/应用程序进行交互:Intent是一个被动对象,它的效果可能因其内容、使用的机制和已安装的应用程序而异。如果应用程序本身无法满足用户的请求,它可以通过与其他应用程序进行交互来提供满足用户需求的功能。例如,在相机-相册操作中,可以通过与系统提供的应用程序进行交互来执行操作。

  2. 系统提供的导航栏也使用Intent:系统提供的导航栏实际上也调用Intent来实现返回、主屏幕、最近使用的应用程序等功能。例如,主屏幕按钮使用Intent.CATEGORY_HOME来实现主屏幕的功能。

综上所述,Intent是Android中用于组件和应用程序之间交互的重要机制,它允许应用程序通过与其他应用程序互动来满足用户需求,并被系统导航栏等组件使用来触发不同的操作。

相关推荐
找藉口是失败者的习惯4 小时前
Jetpack Compose 如何布局解析
android·xml·ui
Estar.Lee9 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
温辉_xh9 小时前
uiautomator案例
android
工业甲酰苯胺10 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
少说多做34310 小时前
Android 不同情况下使用 runOnUiThread
android·java
Estar.Lee12 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
找藉口是失败者的习惯12 小时前
从传统到未来:Android XML布局 与 Jetpack Compose的全面对比
android·xml
Jinkey13 小时前
FlutterBasic - GetBuilder、Obx、GetX<Controller>、GetxController 有啥区别
android·flutter·ios
大白要努力!15 小时前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
天空中的野鸟16 小时前
Android音频采集
android·音视频