自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

baiiu

每天前进三十公里

  • 博客(241)
  • 资源 (1)
  • 收藏
  • 关注

原创 【置顶】 博文汇总

23年底了,想来也工作十年,也一直在csdn输出。这十年,从业务层做到性能优化,再到音视频,再到播放器稳定性相关的native crash。也积累了不少文章,在此汇总一下;另外还有大量的深度源码分析草稿,之后也整理发出来吧。

2023-12-15 18:50:44 1436

原创 MediaCodec源码分析 ACodec状态机详解

UninitializedState:未初始化状态。在业务层调用完成后切换到LoadedState。LoadedState:表示解码器已经加载完了;调用,和后,在LoadedState::onStart中调用让omx进入可Idel状态,后切换到LoadedToIdleState状态。LoadedToIdleState:初始化Buffer,解码器可用了;在接收到OMX_StateIdle返回后,并发送让omx切换到执行态,后切换到IdleToExecutingState状态。

2024-03-17 10:55:06 117

原创 MediaCodec源码分析 状态简单介绍

本文分析MediaCodec.h层的状态机,下篇介绍ACodec状态机,基于7.0代码。During its life a codec conceptually exists in one of three states: Stopped, Executing or Released.Stopped 状态具有三个子状态:Uninitialized、Configured 和 Error。有三种方式可以使 MediaCodec 进入 Uninitialized 子状态:使用工厂方法创建 MediaCodec

2024-03-17 10:43:17 19

原创 MediaCodec源码分析 Codec消息轮转

本文梳理MediaCodec的消息轮转流程,基于7.0代码。MediaCodec底层实现为JMediaCodec、MediaCodec.cpp、ACodec,他们之间是通过media包下的ALooper、AHandler、AMeesage这一套机制进行线程间通信的。本文就是分析这里的流程,先分析ALooper这一套,然后再分析MediaCodec.java是怎么调用操作下去的,ACodec又是如何跟MediaCodec.cpp通信的。

2024-03-13 11:38:59 33 2

原创 Android Native Hook 深入理解PLT hook

本文介绍NativeHook技术里的PLT hook,参考开源的xhook和bhook进行理解,本文不涉及该hook技术源码的分析,只分析大体原理,用于在进行修复稳定性问题时候寻找hook点使用。

2023-12-22 20:28:28 1355

原创 Android源码分析 理解Refbase

最近解决稳定性问题,遇到sp问题,本文就简单梳理RefBase和sp、wp下。

2023-12-13 15:02:06 458

原创 Android 深入理解SurfaceView

更改layoutParams、surfaceView.setVisibility、滑动等基本任何一个对view的操作都会引起updateWindow,所以我们在对SurfaceView操作的时候要加倍小心,避免引起多次updateWindow,从回调上看,就是避免多次触发sufaceChange。通过调整surfaceViewContainer大小、surfaceHolder.setFixedSize,这三种方式均能触发surfaceChange。

2023-09-24 21:18:17 363

原创 MediaCodec源码分析 configure流程

本文梳理MediaCodec configure流程,基于7.0代码,这里只分析AVC和HEVC的视频硬解,流程图如下。

2023-09-12 08:00:00 270

原创 MediaCodec源码分析 createByCodecName流程

本文梳理MediaCodec初始化流程,即create流程,基于7.0代码。流程图如下,创建流程还是比较清晰简单的。

2023-09-07 08:00:00 246

原创 arm体系结构:汇编指令

ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。

2023-08-26 16:11:51 297

原创 arm体系结构:寄存器

本文主要介绍ARM RISC 32位体系结构下的相关知识,主要理解寄存器和相关指令,要读懂汇编啊。

2023-08-24 20:50:49 290

原创 Linux pthread_create源码分析

本文介绍pthread_create函数的使用和源码分析。

2023-06-03 12:53:58 1051

原创 Android 设置线程优先级源码分析

Android中设置线程优先级有thread.setPriority()方式和Process. setThreadPriority()两个方法。使用Process. setThreadPriority()进行更精准的设置,thread.setPriority可能会将线程优先级设置的比background还低,导致线程运行获取不到足够的时间片,出现不可知问题。本篇文章对这两种设置线程优先级的API的进行源码分析。

2023-05-27 17:26:26 435

原创 Android 创建线程源码分析 JavaThread&NativeThread

本文分析在Android中创建线程时候的源码分析,即JavaThread和NativeThread。

2023-05-20 17:59:32 704

原创 Android 性能优化 命令行查看CPU使用率

本文介绍cpu使用率概念,和使用ps命令、top命令和dumpsys cpuinfo命令来查看cpu使用率,帮助我们了解应用程序在运行过程中的整体状态和各个线程状态。

2023-05-06 23:28:21 3597

原创 C语言 非本地跳转 实现native层TryCatch

C语言的本地跳转是指goto、break、continue等语句,但是这个语句最大局限就是只能实现函数内部的跳转。C 语言提供了一种用户级异常控制流形式,称为非本地跳转(non local jump),它将控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用—返回序列。

2023-04-19 23:05:20 459

原创 Android ART&Dalvik虚拟机 追踪对象分配

本文介绍Dalvik虚拟机中的Allocation Tracker,用于追踪dalvik内存分配,能直观的看到分配了什么对象,和分配对象的堆栈。

2023-04-09 15:20:53 107

原创 Android ART虚拟机 GC流程分析

本文分析ART虚拟机的GC流程,主要函数从CollectGarbageInternal开始。当配置CMS为默认回收器时:- collector_type_为kCollectorTypeCMS。- foreground_collector_type_取值为kCollectorTypeCMS。它代表程序位于前台时使用的回收器类型。- background_collector_type_的取值为kCollectorTypeHomogeneousSpaceCompact。它代表程序位于后台时使用的回收器类型。

2023-04-05 14:01:14 556

原创 Android ART虚拟机 GC的各种类型

本文介绍ART虚拟机的GC类型,为下篇介绍ART的GC做准备。每个Space都有自己的gc回收策略,如下图所示:- kGcRetentionPolicyNeverCollect:不需要回收某个Space所包含的垃圾对象(因为该Space可能不存在垃圾对象)。- kGcRetentionPolicyAlwaysCollect:每次垃圾回收都需要处理某个Space空间。- kGcRetentionPolicyFullCollect:直到最后时刻才回收某个Space空间中的垃圾对象。

2023-04-04 23:23:13 481

原创 Android ART虚拟机 对象创建内存分配流程

本篇文章介绍我们在日常开发使用Java时new对象的时,ART在堆上的内存分配是如何分配的。内存又和gc相关,下篇文章会分析ART的gc流程。本文可以参考之前写的Dalivk虚拟机下的对象创建时内存分配流程一起看,会对ART虚拟机理解的更深刻些。

2023-04-03 23:38:55 435

原创 Android ART虚拟机 Space类体系

在ART虚拟机实现中,内存分配和释放的算法是封装在不同的Space中来完成的。而外部使用者只能借助Space及派生类的接口来完成内存的分配与释放。通过阅读这些Space的实现,可以看出ART虚拟机的一个重要的特点就是大量使用映射内存,相较于Dalvik虚拟机来说在内存分配上管理的更细致。

2023-04-02 18:41:38 1195

原创 Android ART虚拟机 堆Heap类构造函数

本文主要介绍Heap的构造函数,从构造函数里大量使用各种Space,可以看出ART虚拟机的一个重要的特点就是大量使用映射内存。主要代码在art/runtime/gc/heap.cc里。

2023-04-01 23:04:10 917

原创 Android ART虚拟机 关键类

本文介绍ART虚拟机中的关键类,方便之后对ART更方便的理解。此处几个类和dalvik一脉相承,也可以更好的理解dalvik里面的GC模块。

2023-03-31 22:56:40 511

原创 Andriod ART虚拟机 启动和初始化

之前整理了一系列Dalvik虚拟机的关于堆内存和GC的文章,轮到对ART内存进行分析优化了,继续整理输出一波,本篇为ART虚拟机系列的第一篇,介绍ART虚拟机的启动和初始化。本ART系列基于7.0代码分析。

2023-03-29 20:30:07 482

原创 C++ 进阶知识整理

本文整理c++进阶语法和知识点。

2023-03-27 18:46:00 103

原创 Android Dalvik虚拟机 堆内存管理 增长&释放

本篇继续介绍安卓dalvik虚拟机系列,介绍Dalvik虚拟机的堆内存管理,即堆是如何增长和释放的。

2023-03-04 14:46:36 846

原创 Android Dalvik虚拟机 GC流程分析

本篇继续介绍安卓dalvik虚拟机,介绍Dalvik虚拟技的GC流程。

2023-03-01 21:26:02 974

原创 设计模式 状态机

本文梳理状态机概念,在实操中状态机和类似,只是被封装起来,可以很方便的实现状态初始化和状态转换。

2023-02-19 22:02:13 943

原创 Android Dalvik虚拟机 对象创建内存分配流程

本篇文章介绍我们在日常开发使用Java时new对象的时,Dalvik在堆上的内存分配是如何分配的。内存又和gc相关,下篇文章会分析Dalvik的gc流程。

2023-02-12 16:55:59 589

原创 Android Dalvik虚拟机 堆初始化流程

Dalvik虚拟机中,堆是由heap[0] Active堆和heap[1] Zygote堆两部分组成的。其中,Zygote堆用来管理Zygote进程在启动过程中预加载和创建的各种对象,而Active堆是在Zygote进程fork第一个子进程之前创建的。之后无论是Zygote进程还是其子进程,都在Active堆上进行对象分配和释放。这样做的目的是使得Zygote进程和其子进程最大限度地共享Zygote堆所占用的内存。

2023-02-11 18:48:38 794 1

原创 Android Dalvik虚拟机 启动和初始化

本文整理Dalvik虚拟机在启动流程和初始化流程,为下篇分析Dalvik的内存分配流程和gc流程打一个基础。本系列代码均基于4.4.2分析。Dalvik虚拟机启动流程、Dalvik虚拟机初始化流程、Dalvik虚拟机核心变量gDvm含义

2023-02-05 17:07:28 483

原创 Android 虚拟机 内存优化 分析GC日志

Android虚拟机在发生垃圾回收 (GC) 事件时,会把相应消息会输出到 Logcat 中,可以看出来虚拟机的内存情况,这为我们做内存优化提供了另外一个可参考的依据,要尽量减少stop the world类型的GC。本文介绍如何查看GC日志,先做到看懂GC日志。

2023-01-07 17:04:20 2589

原创 操作系统 内存管理单元MMU TLB

本文详细介绍Linux操作系统下的内存管理单元MMU和TLB。内存管理子系统的架构如图所示,分为用户空间、内核空间和硬件3个层面。硬件层面处理器包含一个称为内存管理单元(Memory Management Unit, MMU)的部件,负责把虚拟地址转换成物理地址。内存管理单元包含一个称为页表缓存(Translation Lookaside Buffer, TLB)的部件,保存最近使用过的页表映射,避免每次把虚拟地址转换成物理地址都需要查询内存中的页表。MMU地址转换流程主要分为几个阶段:1. 用户进程访

2022-10-15 23:54:37 842

原创 Android 性能优化 Systrace使用

汇总System trace使用,学习下音视频如何用Systrace查看,有心得了会贴上来。

2022-10-10 00:15:02 1222

原创 音视频 HLS协议和m3u8格式分析

HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。HLS是提供一个m3u8地址,他俩的区别可以说HLS是协议,m3u8是文件格式;

2022-09-05 08:13:48 1592

原创 Android 反编译与防逆向

前言本文先水一篇草稿,之后可能会经常用到反编译与防逆向的代码,暂时都往这里堆一堆代码吧。反编译工具强烈推荐:https://github.com/skylot/jadxbrew install jadxjadx xxx.apk混淆防逆向

2022-05-12 21:26:17 474

原创 Kotlin 常用API汇总

Any类,equals和hashCode方法Kotlin 中的==等同于调用 equals() 函数,比较两个对象引用是否相等要用 === 操作符。用 ==操作符时不需要担心空安全,a == b 等同于 a?.equals(b) ?: b == null。和Java一样,复写equals()方法同样遵循复写equals()方法遵守的约定,需要同时复写hashCode()方法。public open class Any public constructor() { public open

2022-04-19 17:53:38 3027

原创 C++ 侯捷课程知识整理

前言本文整理C++基础知识,用于开发中日常查阅。引用智能指针const关键字const修饰变量const修饰的变量也称为常量。使用关键字const对限定变量的值,避免其他操作改变该值,不可修改;const 数据类型 变量名 = 常量值const对象一旦创建后就不能改变,所以必须对其进行初始化。默认情况下,const对象仅在文件内有效。编译器在编译过程中会把用到该const变量都替换成对应的值。添加volatile后,可以禁止编译器对该值进行优化,必须在运行时去读取该c

2022-02-07 17:16:30 1398

原创 C++ Primer 前六章基础知识笔记

第二章:变量和基本类型列表初始化C++语言定义了好几种不同形式的初始化,这也是初始化问题复杂性的一个体现。C++11用花括号来初始化变量得到 了全面应用,这种初始化方式被称为列表初始化,现在无论是初始化对象还是赋新值,都可以使用花括号这种方式了。int a = 0;int a = {0};int a{0};int a(0);默认初始化如果定义变量时没有指定初值,则变量会被默认初始化。内置类型是成员变量时会被初始化为0;是局部变量时将不初始化,是一个任意值,是一个不确定的值。使用未初始

2021-08-26 10:12:27 177

原创 计算机网络 网络地址转换NAT

前言本文介绍网络地址转换NAT,NetworkAddress Translation,主要用于解决IPv4太少的问题。NAT的主要作用由于IPv4地址空间太小,所以使得目前Internet正面临了两个关键问题:一是公网IP地址资源的匮乏,二是路由表的日益庞大,路由效率低。NAT(NetworkAddress Translation,网络地址转换)技术其出发点都是为了解决IPv4地址(主要是针对公网IPv4地址)不足的问题,提高现有IPv4地址利用率。NAT技术允许组织内部网络使用非全局可路由IP地址

2021-08-15 22:07:32 1201

深入理解Android内核设计思想第一版高清完整带目录

第一版,带目录,高清完整 《深入理解Android内核设计思想》适用于Android 4.3以上的版本。全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统等核心技术在Android中的实现原理。书中讲述的知识点大部分来源于工程项目研发,因而具有较强的实用性,希望可以让读者“知其然,更知其所以然”。全书分为编译篇、系统原理篇、应用原理篇、系统工具篇共4篇22章,基本涵盖了参与Android开发所需具备的知识,并通过大量图片与实例来引导读者学习,以求尽量在源代码分析外为读者提供更易于理解的思维方式。 《深入理解Android内核设计思想》既适合Android系统工程师,也适合于应用开发工程师来阅读提升Android开发能力。读者可以在《深入理解Android内核设计思想》潜移默化的学习过程中更深刻地理解Android系统,并将所学知识自然地应用到实际开发难题的解决中。

2018-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除