Android随手记

activity的生命周期

创建时

onCreate() - onStart() - onResume() - onPause() - onStop() - onDestroy()

切换时

a切换到b
a.onCreate() - a.onStart() - a.onResume - a.onPause - b.onCreate() - b.onStart() - b.onResume() - a.onStop()
b切换回a
b.onPause() - a.onRestart() - a.onStart() - a.onResume() - b.onStop() - b.onDestory()

Handler相关

Handler是什么

一句话总结:Handler是用于与跨线程通信的,而每个线程都有自己的looper,looper管理线程的任务,所以其实Handler就是用于与looper通信的,在Handler里装哪个looper,最终代码就在哪个线程上跑

Looper

Looper的ThreadLocal

Looper内部有个成员变量sThreadLocal<Looper>,用于在不同的线程获取不同(每个线程独有的)looper

Looper.prepare()的内部其实是sThreadLocal.set(new Looper),就是创建一个新的looper,set到当前线程里去,以后在这个线程里拿的looper就是这里来的

Looper.myLooper()的内部是sThreadLocal.get(),就是去get了一下之前set的looper

Android开机流程

在这里插入图片描述

电源键

按下电源键后,引导芯片代码从固化在ROM中的地方开始执行,加载引导程序BootLoader到RAM中,然后执行

BootLoader

BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

Kernel

Android内核启动时,会设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init.rc”文件,然后启动init进程

init

init进程是第一个用户空间的进程,也就是第1号进程(第0号进程是linux)
init进程在system/core/init/main.cpp文件的main函数中,分为两个阶段完成启动过程
第一阶段时进行一些目录创建、设备节点创建和设备挂载的动作(毕竟Android跑在linux上)
第二阶段启动属性服务(指定文件读取属性、系统属性等)、解析init.rc文件并启动相关进程
其中第二阶段的init.rc不止一份,例如google、soc、odm厂商都有自己的init.rc

Zygote

Zygote进程由init进程启动,他是Android系统的第一个进程(pid为0)
init拉起Zygote的简化代码如下

Result<void> Service::Start() {...pid_t pid = -1;if (namespaces_.flags) {pid = clone(nullptr, nullptr, namespaces_.flags | SIGCHLD, nullptr);} else {pid = fork();// 1.fork创建service进程(也就是zygote进程)}if (pid == 0) {...if (!ExpandArgsAndExecv(args_, sigstop_)) {PLOG(ERROR) << "cannot execv('" << args_[0]<< "'). See the 'Debugging init' section of init's README.md for tips";}...}
}

可以看到,Zygote由init进程fork(创建父进程的子进程)而来(估计是在linux虚拟机里创建,所以pid为0?),下面的ExpandArgsAndExecv用于指定Zygote的执行路径

所有的应用程序进程以及系统服务进程(SystemServer)都是由Zygote进程孕育(fork)出来的,zygote本身是Native应用程序,与驱动内核无关。

Zygote主要工作有两个
1、启动socket服务,监听socket,响应启动应用请求,有app点开的时候socket服务端会fork生成新的app进程(Dalvik虚拟机)
2、启动systemserver

SystemServer

启动各种系统服务,例如上下文管理器、电池服务、窗口管理器等

Android四层架构

应用程序层
应用框架层
类库层
linux内核

synchronized

首先明确,synchronized锁住的对象都是final的,也就是说如果我们对class中的某个函数加synchronized关键字,其实锁住的是这个class(例子中锁住的是StopThread.class),例如
在这里插入图片描述
这段代码中,有两个函数都被添加了synchronized关键字,那么不管有多少对象(线程)调用这两个函数其中的任意一个,同一时间只有一个函数会被执行(毕竟底层是用class.fun(),这个class被锁住了那么就只有一个fun能被执行),也就是说这个class中不管有多少函数被添加了synchronized关键字,同一时间执行的函数都只能有一个,这种做法其实会导致代码效率降低

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Diffusers库】第一篇 快速入门

目录 写在前面的话Diffusers描述Diffusers安装Diffusers快算入门(简单实用)1. pipeline的实例化2. 计算位置的切换3. 图像生成及保存4. 调度器(重点)5. 模型介绍 写在前面的话 这是我们研发的用于 消费决策的AI助理 &#xff0c;我们会持续优化&#xff0c;欢迎体验与反馈。微信…

HCIP---IS-IS协议

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.IS-IS协议概述 IS-IS是一种基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;它使用最短路径优先算法&#xff08;SPF或Dijkstra&#xff09;进行路由计算。这种协议在自治…

JEDEC标准介绍及JESD22全套下载

JEDEC标准 作为半导体相关的行业的从业者&#xff0c;或多或少会接触到JEDEC标准。标准对硬件系统的设计、应用、验证&#xff0c;调试等有着至关重要的作用。 JEDEC&#xff08;全称为 Joint Electron Device Engineering Council&#xff09;是一个电子组件工程标准制定组织…

学习 考证 帆软 FCP-FineBI V6.0 心得

学习背景&#xff1a; 自2024年1月起&#xff0c;大部分时间就在家里度过了&#xff0c;想着还是需要充实一下自己&#xff0c;我是一个充满热情的个体。由于之前公司也和帆软结缘&#xff0c;无论是 Fine-Report 和 Fine-BI 都有接触3年之久&#xff0c;但是主要做为管理者并…

TypeScript 中类、接口、枚举、函数、命名空间与模块的理解?应用场景?

文章目录 类、接口、枚举定义使用方式**1. 类**继承修饰符私有修饰符受保护修饰符只读修饰符 静态属性抽象类 接口 interface枚举 enum数字枚举字符串枚举异构枚举本质 函数function可选参数剩余类型函数重载 模块命名空间命名空间与模块区别应用场景有需要的请私信博主&#x…

Java请求时间耗时长分析

推断是java.lang.OutOfMemoryError: Metaspace&#xff0c;元空间不够&#xff0c;频繁垃圾收集 这个过程中程序卡住一直不响应&#xff0c;应该是触发FGC有关系。 YGC&#xff1a;451->453 FGC&#xff1a;198->289 FGCT&#xff1a;52.246->76.291 但是堆内存的空间…

Vue 使用@别名

1. 安装 types/node types/node 包允许您在TypeScript项目中使用Node.js的核心模块和API&#xff0c;并提供了对它们的类型检查和智能提示的支持。 npm install types/node --save-dev 比如安装之后&#xff0c;就可以导入nodejs的 path模块&#xff0c;在下面代码 import pat…

小红书如何运营?媒介盒子揭秘

在当下理性消费与情感消费并存的环境中&#xff0c;我们会不断考虑产品能带来的实际价值&#xff0c;同时又期待产品能带给我们情感归属。而小红书的种草笔记就相当于是实用价值和情绪价值的总和&#xff0c;今天媒介盒子就从笔记优势和多账号分发两个角度和大家聊聊&#xff1…

C语言数据结构(6)——队列

欢迎来到博主的专栏——C语言进阶指南 博主ID&#xff1a;代码小豪 文章目录 队列顺序结构的队列顺序队列的初始化顺序队列的入队列操作判断队列是否为空顺序队列的出队列操作顺序队列操作的所有代码 链式结构的队列链式队列的初始化链式队列的初始化链式队列的入队列操作链式…

前端将html导出pdf文件解决分页问题

这是借鉴了qq_251025116大佬的解决方案并优化升级完成的&#xff0c;原文链接 1.安装依赖 npm install jspdf html2canvas2.使用方法 import htmlToPdffrom ./index.jsconst suc () > {message.success(success);};//记得在需要打印的div上面添加 idlet dom document.que…

Unity类银河恶魔城学习记录8-4 P80 Blackhole ability state源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic…

广西普通高等教育专升本考试 大纲与说明(电子与信息大类)

&#xff08;2025 年版&#xff09;广西普通高等教育专升本考试&#xff08;以下简称专升本考试&#xff09; &#xff08;电子与信息大类&#xff09; 详细文件看资源绑定 贯彻党的教育方针&#xff0c;落实立德树人根本任务&#xff0c;是普通高校全 日制高职&#xff08;专…