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

  • 相关阅读:
    C++ GDAL用CreateCopy()新建栅格并修改波段的个数
    asp.net外卖网站系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio
    深入浅出MySQL-04-【常用函数】
    ASP.NET LIMS系统全套源码(演示+自主版权+项目使用)
    我的master节点是好的,现在是第一个node1节点利用master节点给出的加入的代码结果报错,如何解决?(标签-kubernetes)
    微软商店无法访问
    [项目管理-4]:软硬件项目管理 - 人月神话:项目时间管理(时间)- 概述
    Golang sync.Pool
    AJAX之数据交换
    学习小心意——python的构造方法和析构方法
  • 原文地址:https://blog.csdn.net/u011897062/article/details/132921141