深入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中用于组件和应用程序之间交互的重要机制,它允许应用程序通过与其他应用程序互动来满足用户需求,并被系统导航栏等组件使用来触发不同的操作。

相关推荐
小蜜蜂嗡嗡41 分钟前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi001 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体
zhangphil2 小时前
Android理解onTrimMemory中ComponentCallbacks2的内存警戒水位线值
android
你过来啊你3 小时前
Android View的绘制原理详解
android
移动开发者1号6 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号6 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
ii_best10 小时前
按键精灵支持安卓14、15系统,兼容64位环境开发辅助工具
android
美狐美颜sdk11 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
恋猫de小郭15 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
aqi0016 小时前
FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg
android·ffmpeg·音视频·流媒体