自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

博客

研究明白

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

原创 android_binder源码分析之_binder驱动使用服务

一,binder驱动源码分析,使用服务过程。

2024-05-26 23:19:34 219

原创 android系统serviceManger源码解析

从Android.bp文件中,还存在一个名为vndservicemanager的程序,它们的源码都是一样的,只是rc文件存在出入,将传入/dev/vndbinder作为binder驱动。vndservicemanager的访问权限一般较低,通常只有供应商特定的应用程序或系统组件才能够使用vndservicemanager进行服务的注册和查询。vndservicemanager管理的服务通常是供应商(vendor)特定的、定制化的服务,例如硬件厂商提供的驱动程序或服务。native层的SM。

2024-05-06 21:50:42 847

原创 android_systemServer进程启动流程

在startBootstrapServices、startCoreServices、startOtherServices、startApexServices中,对各类服务进行了启动,比如我们常见的ActivityManagerService、PackageManagerService、BatteryService等等,共近百个Service。一,systemServer进程是被Zygote进程fork出来的,具体代码,五,Android系统运行时架构图- systemserver进程所在位置图。

2024-05-04 22:10:55 410 1

原创 android zygote进程启动流程

根据不同的启动模式启动。

2024-05-03 16:34:44 415 1

原创 android init进程启动流程

Android系统完整的启动流程。android 系统架构图。init进程启动服务的顺序。init进程的启动流程。

2024-05-02 18:56:30 463 1

原创 rxjava2源码分析

在ObservableObserveOn对下里面,每次调用onNext的时候都会进行一次线程切换,如果还有后续的Observe,那么就会继续调用这个对应的Observe的onNext方法,虽然每调用一次当前的线程会切换一次,但是最终的消费地方是在业务定义的那个Observe,这个是业务的地方,也就是我们业务真正关系的地方的线程切换。会根据这个订阅源不断的去找上个源,那么到这里就明白了,当前切换线上的会被新的订阅源替代,所以就是为什么多次切换线程只有第一次生效原因。通过多次切换订阅线程,发现只有第一次生效,

2023-10-11 12:20:29 189

原创 okhttp4.11源码分析

上图是整个okhttp一次完整的请求过程,时序图里面有些部分为了方便采用了简单的描述,描述了主要的流程,细节的话,可以具体参考这个流程图看代码。

2023-10-08 20:06:07 230

原创 Glide源码分析

下面的流程图是一次完整的使用Glide加载图片流程,时序图。

2023-10-07 22:27:09 295

原创 自研一个简易版本的OkHTTP

为了彻底搞明白okhttp原理,防着okhttp自研一个。

2023-09-14 16:57:28 468

原创 音视频开发-ffmpeg介绍-系列三个

根据上篇文章的介绍,这篇文章进行具体的实现,配置ffmpeg到AS的过程就不讲解了。

2023-07-23 16:45:47 447

原创 音视频开发-ffmpeg介绍-系列二

1. 是为了在一个文件流(Stream)中能同时存储视频流(Video Stream)、音频流(Audio Stream)、字幕(Subtitle)、附件(t)、数据(d)等内容。这正是“复用”的含义所在(分时复用)。有别于通用文件数据的压缩,在图像或音频压缩的时候,可以借助图像特性(如前后关联、相邻图块关联)或声音特性(听觉模型)进行压缩,可以达到比通用压缩技术更高的压缩比。AVCodecContext:编解码器上下文,编码和解码时必须用到的结构体,包含编解码器类型、视频宽高、音频通道数和采样率等信息;

2023-07-23 16:13:46 875

原创 音视频开发-ffmpeg介绍-系列一

官网地址FFmpeg全称为Fast Forward Moving Picture Experts Group(mpeg:动态图像专家组),于2000年诞生,是一款免费,开源的音视频编解码工具及开发套件。它的功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes)。FFmpeg 本身是一个庞大的项目,包含许多组件和库文件,最常用的是它的命令行工具,FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音。

2023-07-21 17:34:22 772

原创 音视频专栏-音视频同步方案

音频的播放,也有 DTS、PTS 的概念,但是音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。在音视频一起播放的时候,我们通常需要面临一个问题:怎么去同步它们,以免出现画不对声的情况。经过我们会使用第二种方案,因为视频多一帧或者少一帧,其实人的肉眼分辨的不是很清楚,也就是说眼睛对这个不是那么的敏感,但是人耳对声音是特别的敏感。一,我们知道视频中有dts和pts,其实音频里面也有dts和pts,只不过音频里面没有B帧,二,欢迎大家一起交流,批评指正。

2023-05-29 15:14:29 467

原创 音视频专栏-DTS&PTS

一,网上很多人都在讲dts和pts,但是么有几个人把这个问题讲清楚,讲明白的,甚至很多做了很多年的音视频开发的人都搞不明白,今天我把原理图整理下,和大家一起学习,如有问题,欢迎批评指正。

2023-05-29 14:34:07 2197 1

原创 音视频专栏-音视频播放流程3

导论:其实我们拿到一个音视频数据,在开始播放他的时候,其实就是一个容器里面的压缩数据,那么此时要播放的时候就需要解复用-->解码--> 驱动音视频驱动-->驱动音视频硬件来播放,这是整个音视频播放的流程。三.视频文件构成就是:N段图像+N段声音最终经过编码(封装)到一个容器里面行程了视频文件,这个视频文件可以是mp4,avi,flv等等格式,这个就是音视频文件的本质。二.FFmpeg解码音视频流程图。一.音视频播放流程原理图。

2023-05-29 14:22:47 173

原创 音视频专栏-重要的数据结构总结2

AVFormatContext: 封装格式上下文结构体,全局结构体,保存了视频文件封装格式相关信息。AVCodecContext:编码器上下文结构体,保存了视频(音频)编解码相关信息。AVCodec:每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。AVStream:视频文件中每个视频(音频)流对应一个该结构体。AVInputFormat:每种封装格式,对应一个该结构体。

2023-05-29 14:18:37 71

原创 音视频专栏-基础知识总结

TS | MPEG | 支持 | MPEG-1, MPEG-2, MPEG-4, H.264 | MPEG-1 Layers I, II, III, AAC, | IPTV,数字电视 || MP4 | MPEG | 支持 | MPEG-2, MPEG-4, H.264, H.263等 | AAC, MPEG-1 Layers I, II, III, AC-3等 | 互联网视频网站 |

2023-05-29 11:41:05 610

原创 Clion/Idea无法登录Github问题记录

4.然后点击生成token, 此时粘贴到Clion或者Idea 就可以了。2.解决办法:使用token口令的方式登录。登录到github,然后。3.下面这些全部选上。

2023-05-23 16:00:42 603

原创 Android Studio源码分析系列一之点击Run背后的秘密

关键词:Android studio run背后的秘密,android编译流程提示:可能需要大概30分钟阅读时间背景:平时在开发过程中,大部人人都是通过点击Run' 按钮,运行app,Android Studio 就会开动,代码奇迹般地变成 APK,被安装到手机上,显示 APP 的界面。背后发生了什么?提示:以下是本篇文章正文内容,下面案例可供参考例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2023-05-08 10:42:38 552

原创 SPI原理以及SPI在Android中的实战

loader.iterator() 返回一个迭代器。职责,或者是一些flavors的配置,启动数据等等的基本配置信息,配合上 flavors那么就可以一次打包生成不同的产物,根据不同的flavors替换不同的。当实现方提供了接口和实现,我们可以通过调用实现方的接口从而拥有实现方给我们提供的能力,这就是 API ,这种接口和实现都是放在实现方的。按照上述的步骤就可以实现业务解耦,达到高内聚,低耦合的标准,同时大大提高项目的可维护性,APP壳子是非常轻量级的一层,只做最基本的集成。

2023-01-04 17:49:17 413

原创 APT在Android中应用场景实战和分析

Types 类型相关的工具类,processor java代码不同的是,当process执行的时候,class的由于类并没有被传递出来,所以大部分都行都是用element来代替了,但是apt还是能帮助我们解决很多问题的,我们可以把一些机械化的操作,通过anntation的方式去简化,比如butterknife,这样开发就可以有更多的精力去专。//messager.printMessage(Diagnostic.Kind.NOTE,"-------开始处理注解------");

2023-01-04 17:47:15 329

原创 gradle源码分析

到这里我们就知道了整个gradle的入口是GradleWrapperMain,基本上可以看到,就是执行了 gradle/wrapper/gradle-wrapper.jar 里的 org.gradle.wrapper.GradleWrapperMain,这样我们就知道了,gradle 的入口类是 org.gradle.wrapper.GradleWrapperMain,也就知道代码该从何开始看了。调用的方法对应的脚本代码在下面加了注释。这里根据 settings.gradle 的配置,创建项目实例。

2023-01-04 17:41:45 422

原创 浅谈binder-系列2

一: 简介在整个Android系统里面,所有的应用程序都是由Android 系统里面的Activity,Service,Broadcast,ContentProvider这四大组件中的一个或者多着拼接而成的,这四大组件所涉及到的的进程间的通信底层都是依赖于Binder IPC通信机制。比如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案,比如activi

2021-02-23 14:48:35 275

原创 浅谈binder-系列1

binder是Android实现IPC(进程间通信)的一种方式,要详细的把binder讲解清楚,需要花费好几篇文章,本篇文章首先从以下几个方面进行讲解binder是什么 binder作用 Android为什么采用binder作为进行进程间通信方式一:binder是什么:(1):Binder作为Android系统提供的一种IPC机制,是一种C/S结构模式,android中的binder是采用的http://www.angryredplanet.com/~hackbod/openbinder/

2021-02-22 21:07:42 196

原创 mac上如何通过android studio不用编译阅读源代码

1.对于做开发的人来说,阅读一手的源代码显得特别的重要,在windows上可以使用source insight,但是mac上面没有,但是我们还需要阅读源代码,那么怎么办呢,可能有人说是使用subline,但是我觉得使用android studio习惯了,今天我就教大家如果使用android studio阅读安卓源码2.环境准备下载安卓源代码:下载repo,给repo设置环境...

2020-03-21 21:32:28 459

原创 Flutter探索-Flutter 不一样的跨平台解决方案

简介Flutter作为谷歌最近推出的跨平台开发框架,一经推出便吸引了不少注意。关于Flutter,目前我们知道它是一个跨平台开发框架。但是它本身并不止于此,例如Fuchsia、Dart等,我们也都需要去了解。Fuchsia说到Flutter,绝对绕不开Fuchsia,这个是谷歌开发的一款全新的操作系统,GitHub地址以及Google source主页。Fuchsia内核是Magent...

2019-12-26 11:39:26 214

原创 Android 开发中实践总结

做Android开发这么久了,总结下日常工作的经验总结,希望对大家有所帮助最佳做法编程是一个创造性的领域,构建 Android 应用也不例外。无论是在多个 Activity 或 Fragment 之间传递数据,检索远程数据并将其保留在本地以在离线模式下使用,还是复杂应用遇到的任何其他常见情况,解决问题的方法都会有很多种。虽然以下建议不是强制性的,但根据我们的经验,从长远来看,遵循这些建...

2019-10-31 15:26:44 591

原创 android 加载器

Android P(API 级别 28)中已弃用加载器。在处理 Activity 和 Fragment 生命周期时,推荐使用ViewModels和LiveData的组合来处理加载数据。当加载器等配置发生变更后,ViewModel 仍会存在,但其样板文件会有所减少。LiveData 提供拥有生命周期感知能力的数据加载方法,您可以在多个 ViewModel 中重复使用该方法。您还可使用Med...

2019-10-31 14:37:42 215

原创 android 多dex处理

为方法数超过 64K 的应用启用多 dex 文件当您的应用及其引用的库超过 65,536 种方法时,您会遇到一个编译错误,指明您的应用已达到 Android 编译架构规定的引用限制: trouble writing output: Too many field references: 131000; max is 65536. You may try using -...

2019-10-30 17:09:14 1003

原创 分析堆栈轨迹

调试应用通常需要使用堆栈轨迹。每当您的应用因为错误或异常而崩溃时,都会生成堆栈轨迹。您还可以使用Thread.dumpStack()等方法输出应用代码中任意位置的堆栈轨迹。在连接的设备上,当您的应用在调试模式下运行时,Android Studio 会在logcat视图中输出并突出显示堆栈轨迹,如图 1 所示。图 1.Logcat 中的堆栈轨迹。堆栈轨迹会显示导致抛出异常的...

2019-10-30 16:39:00 640

原创 Android应用程序(APK)的编译打包流程讲解

目标:(1)Android编译打包流程(2) Android是如何通过R文件引用到真正的资源文件?(3)打包流程中的的对齐是什么,为什么要对齐?(4)aapt工具为何把xml编译成二进制文件?一:编译流程;典型 Android 应用模块的编译流程(如图 1 所示)按照以下常规步骤执行:编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中...

2019-10-30 16:28:51 406

转载 转载Android架构

项目架构的重要性:好了,我们言归正传,我们在前面几篇文章谈到了一些项目架构的问题,年前写了一篇“Android组件化最佳实践”,年后写了一篇“浅谈单一结构体项目的组件化改造”,我们提到了单一结构项目里,结构混乱,层次不清,有些模块同一功能解决方案不统一、有了新需求只是在原有项目上不断的砌代码罢了。长此以往,整个项目就是铁板一块,为后期的项目维护和扩展造成了极大的困难。我们在软件开发的时候,在做...

2019-07-04 12:02:06 111

转载 转载Android移动应用架构发展简史

<div id="article_content" class="article_content clearfix" data-track-click="{&quot;mod&quot;:&quot;popu_307&quot;,&quot;con&quot;:&quot;,https://blog.csdn.net/geduo_83/...

2019-07-04 11:52:31 145

原创 Java 新生代、老年代、持久代、元空间

对于学习Java程序的人来说,了解内存显得特别的重要,特别是在一些高级开发中,对于我们Android程序员来说经常碰到的内存泄漏问题追溯到底,其实就是要清楚的了解JVM是如何管理内存的,那么要彻底解决平时开发中一些曹成内存泄漏的问题,就需要清楚的知道JVM分配管理内存的策略,以此在实际的开发过程中规避一些可能造成内存泄漏问题,好了,废话不多少了,直接进入主题吧,本章将带领大家一起学习下JVM的对内...

2018-06-08 11:48:33 3078

转载 怎样优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析

如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析工作一段时间后,经常会被领导说,你这个进入速度太慢了,竞品的进入速度很快,你搞下优化吧?每当这时,你会怎么办?功能实现都有啊,进入时要加载那么多view,这也没办法啊,等等。先看一些现象吧:用Android studio,新建一个Activity自动生成的布局文件都是RelativeLa...

2018-05-29 14:01:14 645

原创 工作中一些必须要看的书

1.重构改善既有代码的设计2.Effective Java 中文版3.深入理解Java虚拟机[JVM高级特性与最佳实践](周志明)4.Java并发编程实战.5.Android开发艺术探索6.Android开发艺术探索7.设计模式之禅8.TCP/IP详解 卷1/卷2...

2018-05-28 14:35:41 824

原创 listview 和RecycleView区别

RecyclerView和ListView之间的区别在我们要搞清楚一个问题之前,首先要搞清楚为什么,是什么,最后才能得出结论一:为什么会出现recycleViewRecyclerView并不会完全替代ListView(这点从ListView没有被标记为@Deprecated可以看出),两者的使用场景不一样。但是RecyclerView的出现会让很多开源项目被废弃,例如横向滚动的ListView, ...

2018-05-24 14:45:26 909

原创 android 启动流程优化教程一

实际开发中我们的项目越来越大的时候,总感觉App启动很慢,需要很长时间,这个时候就需要做一些优化了,那么该如何动手从哪些方面优化呢,下面分享一些在工作中的方法:以上是一些在工作中优化的一些经验,在实际的工作中,大家可以根据自己的事情情况进行,优化,现在的优化,实际开发中利用好Android studio的性能优化工具,可以达到石板工倍效果,...

2018-05-12 18:09:09 405

转载 浅谈Android Architecture Components

浅谈Android Architecture Components浅谈Android Architecture Components简介Android Architecture ComponentsGradle 集成LifeCyclesLiveDataTransformationsViewModelRoomEntitiesEntity的参数 primaryKeysEntity的参数 tableNa...

2018-04-25 14:56:00 207

原创 java 线程池分析第二弹

上次分享了java线程池的原理,这次对各种线程池从内存和cpu使用上进行分析,让读者清楚以后线程池的使用原理和在实际项目中如何使用线程池和怎么选取阻塞队列1.线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。说明:(1)使用newFixedThreadPool内存模型(2)Single...

2018-04-11 11:01:00 270

IDEA详细配置教程,

很好的IEDA使用教程,欢迎大家使用,很好的IEDA使用教程,欢迎大家使用

2014-08-01

空空如也

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

TA关注的人

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