投出去的简历无人问津,原因竟然在这……

news2024/9/27 19:16:05

近期收到了不少朋友的反馈说,失业半个月无人问津,放在前些年第二天开始面试有人找,或者是第二天入职了……,为啥明明不招人要挂着招人的岗位?

随着移动互联网的发展,Android市场的需求也在不断变化和升级。从以前的只要会写简单的几个业务需求就能随便找到一份好工作,升级到如今需要对Framework 底层框架要有一定的了解才能找到一份好工作。这一跨度的升级的变化,导致了不少Android 程序员面临了工作难找的问题,而熟悉Framework的人才却可以随便找工作

如今一些公司招聘面试问的大多是Framework 底层相关的问题,像:AMS、WMS、PKMS、Binder、Handler……等,这些问题对于常年混在业务层的Android开发,并不是很友善,因为在日常开发中涉及到的很少,对其了解的程度也并不多。

所以下面给大家分析一下AMS在Android起到什么作用

先来了解一下android系统启动的流程,如下图所示:

AMS(Activity Manager Service)是android系统中非常重要的一个系统服务,他主要负责四大组件的启动,切换,调度以及应用进程的管理和调度工作。

也就说所有的app应用都会和AMS打交道。

AMS作为系统的引导服务,是在SystemServer进程中启动SystemServer时创建并启动的。

AMS继承自IActivityManager.Stub ,作为系统服务的服务者提供系统服务。

AMS与操作系统中的进程管理和调度模块很像,除了在Android系统中非常重要之外,它涉及到的知识点也非常多。想要了解Android的内部工作机制,就必须先了解AMS的工作原理。

AMS扮演以下几个重要的角色

1.应用程序生命周期管理:AMS负责跟踪和管理应用程序的生命周期,包括启动、暂停、停止和销毁应用程序的Activity。它确保每个Activity按照正确的顺序进行启动和销毁,以及在系统资源不足时进行适当的回收和释放。
2.任务栈管理:AMS负责管理应用程序的任务栈,它维护了当前打开的Activity的顺序和状态。AMS可以根据需要创建新任务栈,将Activity放入特定的任务栈中,并处理任务栈的切换和回退。
3.Activity生命周期回调:AMS通过调用Activity的生命周期方法(如onCreate,onStart,onResume等)向应用程序发送生命周期事件。这使得开发人员可以在适当的时机执行相关的操作,如保存和恢复用户界面状态,管理网络连接等。
4.任务间切换和应用程序交互:AMS负责处理应用程序之间的交互和切换。例如,当用户从一个应用程序切换到另一个应用程序时,AMS负责启动目标应用程序的相应Activity,并将新的任务栈放在前台,以供用户进行操作。

比如在Activity的启动流程中,AMS就是组件管理调度中心,什么都不干,但什么都管!Android系统从开机到桌面,再到APP启动的完整流程,AMS无所不在……

AMS在Android中起到了关键的作用,确保应用程序的正确运行和管理,以及提供良好的用户体验。

当我们深刻了解Android启动流程与AMS特性之后,就可以解决项目开发中的很多问题,比如:屏幕适配、自定义View和ViewGroup、APK加固、热修复、组件化路由、皮肤换肤、插件化、leakCanary内存问题分析、Hilt注入、Jetpack原理、Glide原理、RXJava原理、launchModel、权限验证、四大组件……等相关逻辑和代码

深刻了解之后能帮助Android开发者更加灵活的进行项目开发。

AMS本身是比较复杂的,很多工作多年的Android开发也不太明白AMS的作用。

  • AMS是如何启动的?
  • 如何理解startActivity的流程?
  • 我们是如何应用AMS的核心原理?
  • ……

我们需要去探索的问题还有很多,比如我们在开发中遇到的跳转问题、栈的管理问题、ANR问题等等都是与AMS对四大组件的管理息息相关,只有掌握了AMS,才能更加高效的开发出优质的app

为帮助大家解除这类问题的困扰,这边搜阅了大量的素材,整理了一下的 Android Framework 核心知识点手册,里面记录了:有Handler、Binder、AMS、WMS、PMS、事件分发机制、UI绘制……等等,几乎把更Framework相关的知识点全都记录在册了

《Framework 核心知识点汇总手册》:https://qr18.cn/AQpN4J

Handler 机制实现原理部分:
1.宏观理论分析与Message源码分析
2.MessageQueue的源码分析
3.Looper的源码分析
4.handler的源码分析
5.总结

Binder 原理:
1.学习Binder前必须要了解的知识点
2.ServiceManager中的Binder机制
3.系统服务的注册过程
4.ServiceManager的启动过程
5.系统服务的获取过程
6.Java Binder的初始化
7.Java Binder中系统服务的注册过程

Zygote :

  1. Android系统的启动过程及Zygote的启动过程
  2. 应用进程的启动过程

AMS源码分析 :

  1. Activity生命周期管理
  2. onActivityResult执行过程
  3. AMS中Activity栈管理详解

深入PMS源码:

1.PMS的启动过程和执行流程
2.APK的安装和卸载源码分析
3.PMS中intent-filter的匹配架构

WMS:
1.WMS的诞生
2.WMS的重要成员和Window的添加过程
3.Window的删除过程

《Android Framework学习手册》:https://qr18.cn/AQpN4J

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【springboot】—— 后端Springboot项目开发

后端Springboot项目开发 步骤1 先创建数据库,并在下面创建一个user表,插入数据,sql如下: CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,email varchar(255) NOT NULL COMMENT 邮箱,password varchar(255)…

Turf.js:用于地理空间分析的 JavaScript 库

https://turfjs.org/ 处理和分析地理空间数据在许多应用程序和平台中发挥着至关重要的作用。如地图绘制、路径规划、基于位置的服务和地理空间分析。Turf.js 是一个专门为执行地理空间操作而开发的开源 JavaScript 库。在本文中,我将详细探讨 Turf.js ,…

Linux系统下列出库文件中的符号指令(nm)

文章目录 1 nm指令2 符号类型的含义3 简单示例 1 nm指令 nm是names的缩写, nm命令主要是用来列出某些文件中的符号(说白了就是一些函数和全局变量等)。 nm命令的输出包含三个部分: 1 符号值。默认显示十六进制,也可以…

SNMP 计算机网络管理 实验3(二)SNMP协议工作原理验证与分析

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &am…

从零手写微前端qiankun框架【超详细万字长文】

项目创建 我们创建如图几个文件夹 main&#xff1a;主应用&#xff08;采用vue3作为技术栈&#xff09;react&#xff1a;子应用1vue2&#xff1a;子应用2vue3&#xff1a;子应用3service&#xff1a;服务端代码 vue2子应用&#xff1a; 我们在App.vue中写一点点东西 <t…

Java微服务金融项目智牛股-基础知识一(CAT链路监控)

CAT链路监控 背景&#xff1a;从单体架构到微服务架构的演变&#xff0c; 一个业务请求往往会流转多个服务&#xff0c; 大型互联网产品服务架构尤为复杂&#xff0c;腾讯的抢红包服务&#xff0c; 阿里的交易支付服务&#xff0c; 可能就流转成百上千个服务节点&#xff0c; 面…

HashMap夺命14问

1. HashMap的底层数据结构是什么&#xff1f; 在JDK1.7中和JDK1.8中有所区别&#xff1a; 在JDK1.7中&#xff0c;由”数组链表“组成&#xff0c;数组是HashMap的主体&#xff0c;链表则是主要为了解决哈希冲突而存在的。 在JDK1.8中&#xff0c;有“数组链表红黑树”组成。当…

【软考网络管理员】2023年软考网管初级常见知识考点(19)-防火墙与入侵检测系统IDS

涉及知识点 防火墙有哪些及其功能&#xff0c;防火墙的区域划分及工作模式&#xff0c;IDS是什么及其作用&#xff1f;入侵检测系统的分类及原理&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;…

java.sql.Time 字段时区问题 Jackson 源码分析 意想不到的Time处理类

java.sql.Time 字段时区问题 系列文章目录 第一章 初步分析 第二章 Mybatis 源码分析 第三章 Jackson 源码分析 意想不到的Time处理类 文章目录 java.sql.Time 字段时区问题 系列文章目录前言Jackson 源码阅读1. 先找 JsonFormat.class 打断点一步步跟踪2. 跟踪进入实际处理类…

RTSP视频流相关的一些操作

播放rtsp camera 内容 端口554在网络通信中用于Real Time Streaming Protocol(RTSP)。 gst-launch-1.0 playbin urirtsp://admin:WANGfengtu1210.0.20.190:554/client0x gst-launch-1.0 playbin urirtsp://admin:WANGfengtu1210.0.20.61:554/client1xgst-launch-1.0 rtspsrc …

基于Arduino UNO的循迹小车

目录 1.analogWrite函数的使用 2.红外循迹模块介绍 3.循迹小车代码实现 4.实物示例 1.analogWrite函数的使用 用analogWrite来替换digitalWrite 说明 将一个模拟数值写进Arduino引脚。这个操作可以用来控制LED的亮度, 或者控制电机的转速. 在Arduino UNO控制器中&#…

关于二叉树的操作,详细操作与实现方法

树是数据结构中的重中之重&#xff0c;尤其以各类二叉树为学习的难点。在面试环节中&#xff0c;二叉树也是必考的模块。本文主要讲二叉树操作的相关知识&#xff0c;梳理面试常考的内容。一起来复习吧。 本篇针对面试中常见的二叉树操作作个总结&#xff1a; 前序遍历&#x…

Kubernetes(k8s)容器编排控制器使用

目录 1 Pod控制器1.1 Pod控制器是什么1.2 Pod和Pod控制器1.3 控制器的必要性1.4 常见的控制器1.4.1 ReplicaSet1.4.2 Deployment1.4.3 DaemonSet 2 ReplicaSet控制器2.1 ReplicaSet概述2.2 ReplicaSet功能2.2.1 精确反应期望值2.2.2 保证高可用2.2.3 弹性伸缩 2.3 创建ReplicaS…

专项练习12

目录 一、选择题 1、JavaScript中定义var a"40",var b7,则执行a%b会得到&#xff1f; 2、下面哪个选项中的对象与浏览列表有关&#xff08; &#xff09; 3、下面哪一个语句可以实现在jQuery中找到所有元素的同辈元素&#xff1f; 4、如何阻止IE和各大浏览器默认行为…

CVSS4.0将于2023年底正式发布

通用漏洞评分系统(CVSS)是一种流行的、标准化的方法&#xff0c;用于评估数字系统安全漏洞的严重程度。由事件反应和安全小组论坛(FIRST)开发&#xff0c;它为安全专业人员提供了评估和优先排序风险的一致方法。 目前的CVSS v3.0已经运行了十多年&#xff0c;但因其复杂性和灵…

Jenkins 持续集成:Linux 系统 两台机器互相免密登录

背景知识 我们把public key放在远程系统合适的位置&#xff0c;然后从本地开始进行ssh连接。 此时&#xff0c;远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地&#xff0c;本地会用private key进行解密并把这个随机数发回给远程系统。 最后&#xf…

ModaHub魔搭社区:向量数据库MIlvus服务端配置(四)

目录 常见问题 常见问题 除了配置文件外&#xff0c;怎样可以判断我确实在使用 GPU 做搜索&#xff1f; 有以下三种方式&#xff1a; 使用 nvidia-smi 命令查看 GPU 使用情况。用 Prometheus 配置&#xff0c;详见 使用 Grafana 展示监控指标 > 系统运行指标。使用 Milv…

一文教你Mysql如何性能优化

Mysql性能优化 Mysql性能优化 性能优化维度 数据库优化思路 应急调优的思路&#xff1a; 针对突然的业务办理卡顿&#xff0c;无法进行正常的业务处理&#xff01;需要立马解决的场景&#xff01; show processlist&#xff08;查看连接session状态&#xff09; explain(分…

hudi系列-timeline service

Timeline Service(时间线服务)是hudi的一个组件,用于暴露文件系统视图接口给客户端,是一个基于Javalin+Jetty实现的web服务。当客户端使用远程文件系统视图(RemoteHoodieTableFileSystemView)时,就是访问时间线服务http接口 默认情况下,如果开启了时间线服务,则它运行在…

支付中心“收银台“设计方案

01.收银台的产品架构 重点收银台架构的三个方面&#xff1a; 1.公司所支持的收银台种类以未来拓展倾向 2.支付方式的枚举及根据业务发展预判拓展倾向 3.收银台服务端的能力建设规划和选择 02.收银台的业务架构 收银台&#xff0c;是支付的起点&#xff0c;所以无论是何种…