自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 收藏
  • 关注

原创 Android开发进阶—invoke反射及其原理解析

以上就是Android开发中的invoke原理反射与原理;更多Android开发可以前往《Android核心技术手册》查看获取海量学习资料;里面内容包含Android开发中进阶技术30几个技术板块。invoke方法的过程:原本Java的安全机制使得不同类之间不是任意信息都可见,但JDK里面专门设了个 MagicAccessorImpl 标记类开了个后门来允许不同类之间信息可以互相访问,由JVM管理@CallerSensitive注解/***/

2023-01-30 20:34:26 156

原创 Lock锁原理解析【Android进阶】

lock的存储结构:一个int类型状态值(用于锁的状态变更),一个双向链表(用于存储等待中的线程)lock获取锁的过程:本质上是通过CAS来获取状态值修改,如果当场没获取到,会将该线程放在线程等待链表中。lock释放锁的过程:修改状态值,调整等待链表。《Android核心技术手册》

2023-01-12 16:38:06 286

原创 Android开发必修—Activity,View,Window三者之间的密切联系【深度解析】

Activity就像工匠,Window就像是窗户,View就像是窗花,LayoutInflater像剪刀,Xml配置像窗花图纸。Android根据他们不同的职能让他们各斯其活,同时也相互配合展示给我们灵活、精致的界面。一张图理清所有层级关系:View、Window以及Activity主要是用于显示并与用户交互的。这让我们在初学的时候很容易弄混,而且无法理解他们区别以及联系。本文是笔者查阅相关资料后,结合自己的理解写出来。希望能帮你梳理清楚他们各自的工作职责,以及是因为什么需求导致了它们的出现。

2023-01-11 17:01:45 288

原创 OKhttp-基本工作流程&责任链模式原理

整理一下上述流程,当调用getResponseWithInterceptorChain()方法后,初始化拦截器和链条,并为链条添加5个节点,后续调用链条的proceed()方法,proceed()会去创建一个新链条,并使下标加1,再执行当前链条的下标位置的拦截器的intercept()方法,并将刚才创建的链条当成参数传入intercept()方法,在拦截器的intercept()方法实现中,又会递归去调用传入链条的proceed()方法,直到链条执行结束。《Android核心技术手册》

2023-01-09 17:04:27 276

原创 音视频开发—抖音GsyVideoPlayer视频底层分析使用

最后解释一下,从列表视频到全屏视频的过程中,无缝衔接了,原因就是,只是GsyVideoPlayer这个布局换了一个父控件,GsyVideoManager中的medieplayer并没有停止播放,所以视频无缝衔接了。AudioManager.AUDIOFOCUS_GAIN_TRANSIENT-------------暂时获取音频焦点,比如音乐后台播放,当前视频播放会抢夺音频焦点,视频播放完成,音乐自动播放;要知道关于音视频的开发需要积累许多底层知识,需要一系列的学习途径才能成为一个音视频开发高手。

2023-01-05 15:41:59 53

原创 Handler的消息机制与消息延迟代码实现

当MessageQueue 在nativePollOnce()被nextPollTimeoutMillis 阻塞时,当有另外一个消息入队进行唤醒时,nativePollOnce()的阻塞状态立即被唤醒,然后进行处理消息,当发现now < msg.when 时,根据新的阻塞时间进行等待。Android的消息处理机制表面上只是使用了Handler,但其实还用到了其他的东西,比如说ThreadLocal,Looper,MessageQuery等,这些组合在一起使用,才构成了整个Android消息机制。

2023-01-04 17:01:08 576

原创 Android绘制原理【通透版】

Android 的显示过程可以简单概括为:Android 应用程序把经过测量、布局、绘制后的surface 缓存数据,通过 SurfaceFlinger 把数据渲染到显示屏幕上,通过 Android 的刷新机制 来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要 绘制的数据传递到系统层服务,系统层服务通过刷新机制把数据更新到屏幕。通过阅读 Android 系统的源码可以了解显示的流程,Android 的图形显示系统采用的是 Client/Server 架构。

2023-01-03 16:26:48 270

原创 Android性能优化——内存泄漏的根本原因

什么是内存泄露,通俗的来说就是堆中的一些对象已经不会再被使用了,但垃圾收集器却无法将它们从内存中清除。内存泄漏很严重的问题,因为它会阻塞内存资源并随着时间的推移降低系统性能。如果不进行有效的处理,最终的结果将会使应用程序耗尽内存资源,无法正常服务,导致程序崩溃,抛出java.lang.OutOfMemoryError异常。堆内存中通常有两种类型的对象:被引用的对象和未被引用的对象。被引用的对象是应用程序中仍然具有活跃的引用,而未被引用的对象则没有任何活跃的引用。

2022-12-30 16:20:34 417

原创 Android进阶——Javac编译解析

在Javac源码中,插入式注解处理器的初始化过程是在initProcessAnnotations()方法中完成的,而它的执行过程则是在processAnnotations()方法中完成的,这个方法判断是否还有新的注解处理器需要执行,如果有的话,通过com.sun.tools.javac.processing.JavacProcessingEnvironment类的doProcessing()方法生成一个新的JavaCompiler对象对编译的后续步骤进行处理。

2022-12-29 16:15:19 434

原创 Android核心技术——Jetpack Hilt依赖注入

用@HiltAndroidApp注解Application;所有使用Hilt注入框架的应用都必须包含一个带有 @HiltAndroidApp 注释的 Application 类。@HiltAndroidApp注解 会触发 Hilt 的代码生成操作,生成的代码包括应用的一个基类,该基类充当应用级依赖项容器;​}然后,在AndroidManifest.xml中引入我们自定义的Application类。此时,生成的Hilt组件会附加到 Application 对象的生命周期,并为其提供依赖项。

2022-12-28 16:21:51 568

原创 Android插件化技术——【class学习】

class 文件就是能够被 JVM 识别,加载并且执行的文件格式。从定义来看,class 文件没有想象中的那么神秘,和其他格式如 txt,mp4 一样,只是一种文件格式,它存储的是我们应用程序。不止 Java 语言,很多其他语言,比如 Scala,Python,都可以生成 class 字节码文件,被 JVM 识别和执行。

2022-12-27 15:52:54 342

原创 Android进阶——SDK开发【学习+经验+注意事项】

SDK全称 Software Development Kit,广义上的 SDK 是为特定的软件包、软件框架、硬件平台、操作系统等建立应用程序时所使用的开发工具的集合,狭义上的 SDK 则是基于系统 SDK 进行开发包装的、新的、独立的、能够完成特定功能并返回相关数据的一组工具的集合。简单来说:将一些业务逻辑独立出来,打包成jar、so、aar,暴露一些APIs给外部调用,也可以称为SDK。如推送SDK,支付SDK,地图SDK…Android 推荐使用 maven 仓库,通过 gradle 进行依赖。

2022-12-26 16:02:44 164

原创 Android开发进阶——Coil对比Glide分析

Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库。与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势。它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。并且是全用Kotlin编写,如果你是纯Kotlin项目的话,那么这个库应该是你的首选。

2022-12-24 21:28:34 1170 1

原创 音视频开发——H264码流学习

H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC。H.264标准的主要目标是:与其它现有的视频编码标准相比,在相同的带宽下提供更加优秀的图象质量。通过该标准,在同等图象质量下的压缩效率比以前的标准(MPEG2)提高了2倍左右。

2022-12-23 16:10:34 26

原创 AMS启动流程——APP启动过程

AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要;组件状态管理:包括四大组件的开启,关闭等一系列操作,如startActivity,startActivityAndWait,activityPaused,startService,stopService,removeContentProvider等;组件状态查询:查询组件当前运行等情况。

2022-12-20 16:19:04 439

原创 Android核心技术——Coil 解析与使用

Coil 是一个非常年轻的图片加载库,在 2020 年 10 月 22 日才发布了 1.0.0 版本,但却受到了 Android 官方的推广,在 Android Developers Backstage 这个博客中专门聊过一期。推广的原因比较简单:一方面是这个库确实做得很好,另一方面是这个库完全是用 Kotlin 写的,而且运用了大量 Kotlin 的特性,尤其是协程。所以 Google 嘴上说着不会放弃 Java,但实际上咱们都懂的。

2022-12-17 20:55:58 626

原创 OpenMAX——数据格式&OMX输入缓冲

开放多媒体加速层(英语:Open Media Acceleration,缩写为OpenMAX),一个不需要授权、跨平台的软件抽象层,以C语言实现的软件接口,用来处理多媒体。它是由Khronos Group提出的标准,也由他们来维持,目标在于创造一个统一的接口,加速大量多媒体资料的处理。

2022-12-16 16:23:38 478

原创 Kotlin小菜——基础语言教程

Kotlin是JetBrains推出的一种编程语言,JetBrains是最智能的Java IDE的官方设计器,名为Intellij IDEA。这是在JVM上运行的强静态类型语言。2017年,谷歌宣布Kotlin是Android开发的官方语言。Kotlin是一种开源编程语言,它将面向对象的编程和功能特性组合到一个独特的平台中。内容分为不同的章节,其中包含相关主题以及简单而有用的示例。Kotlin受其他编程语言(例如Java,Scala,Groovy,Gosu等)的影响。

2022-12-15 16:40:21 311

原创 Android开发【全面理解Activity】

你自己写的Activity会按需要 重载这些方法,onCreate是免不了的,在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate -> onStart -> onResume, 在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期,但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?一个项目中会包含多个activity,系统中使用任务栈来存储这些activity,任务栈呢,是一种“后进先出”的栈结构。

2022-12-09 14:05:00 588

原创 Android APK编译打包流程【解析】

作为一个Android开发,每天都会有相当一部分的时间花在编译打包上,如果项目比较大的话编译一次可能就要十几分钟。那么在编译打包的过程中AGP到底做了什么?为什么编译那么耗时,又该怎么优化?要解决这些问题,首先就需要我们对编译打包的流程有个总体的了解。本文主要包括以下内容。首先看下Android官网给出的编译打包总体流程。典型 Android 应用的构建流程如图所示,主要分为以下几步:关于Android编译打包还有一张更加复杂的图。这个看起来是相当复杂的,但其实我们也可以把这些步骤做一个分类,跟总体流程的四

2022-12-05 21:13:23 52

原创 Android车载应用开发——DLNA开发浅析

DLNA 成立于2003 年6 月24 日, 其前身是DHWG (Digital Home Working Group 数字家庭工作组),由Sony、Intel、Microsoft等发起成立、旨在解决个人PC ,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能。举个简单的例子,比如在家里,你手机里有一部电影,但是手机没电了,或者你想通过电视浏览手机里的图片。在UPNP网络中,最新的控制控制单元就是服务,服务描述的设备在不同的情况下的活动和设备的状态。

2022-12-02 17:36:37 553

原创 音视频开发—H264编码【SPS和PPS】

在 H.264 流中,有两种 NALU 极其重要,H264码流可以分为两层,VCL层和NAL层,NAL的全称是Network abstraction layer,叫网络抽象层,它保存了H264相关的参数信息和图像信息,NAL层由多个单元NALU组成,NALU由了NALU头(00 00 00 01或者00 00 01)、sps(序列参数集)、pps(图像参数集合)、slice、sei、IDR帧、I帧(在图像运动变化较少时,I帧后面是7个P帧,如果图像运动变化大时,一个序列就短了,I帧后面可能是3个或者4个P帧

2022-12-01 18:44:33 39

原创 Android 插件化开发【路线方法】

先简单介绍一下 Android 插件化。很早之前已经有公司在研究这项技术,淘宝做得比较早,但淘宝的这项技术一直是保密的。直到 2015 年才陆续出现很多框架,Android 插件化分成很多技术流派,实现的方式都不太一样。我今天的主题就是,Android 插件化的不同流派、不同思想,以及做插件化需要掌握哪些知识。

2022-11-30 16:54:43 50

原创 Framework—进程间通信(IPC) 系列之管道(pipe)

所谓管道,是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称 pipe 文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接收管道输出的接收进程(即读进程),可从管道中接收数据。由于发送进程和接收进程是利用管道进行通信的,故又称管道通信。为了协调双方的通信,管道通信机制必须提供以下3 方面的协调能力。互斥。当一个进程正在对 pipe 进行读/写操作时,另一个进程必须等待。同步。

2022-11-28 17:14:01 50

原创 Flutter框架的简单理解

有了独立的状态和widget对象,其他widget可以以同样的方式处理无状态和有状态的widget,而不必担心丢失状态。选择一种自定义的方法来释放框架的全部表现力,或者使用构件层中的构建块,或混合搭配。您可以实现Flutter提供的所有现成的widget,或者使用Flutter团队用于构建框架的相同工具和技术创建您自己的定制widget。您可以通过告诉框架使用另一个widget替换层次结构中的widget来响应事件,例如用户交互,替换后框架会比较新的和旧的widget,并高效地更新用户界面。

2022-11-26 21:30:23 75

原创 浅析Android开发——RxJava原理

ObservableEmitter: Emitter是发射器的意思,那就很好猜了,这个就是用来发出事件的,它可以发出三种类型的事件,通过调用emitter的onNext(T value)、onComplete()和onError(Throwable error)就可以分别发出next事件、complete事件和error事件。(2) 当上游发送了一个onComplete后, 上游onComplete之后的事件将会继续发送, 而下游收到onComplete事件之后将不再继续接收事件.可以参考这份电子资料。

2022-11-24 17:29:14 59

原创 Android中JVM七大垃圾收集器【解析】

新生代:年轻代用来存放最近创建的对象老年代:主要存放应用程序中生命周期长的内存对象永久代:内存的永久保存区域(类和元数据),GC不参与回收Serial收集器:串行收集器(单线程)Serial Old:(Serial的老年代版本)ParNew收集器:Serial收集器的(多线程)版本Parallel Scavenge收集器:用户可控制吞吐量(多线程)Parallel Old: Parallel老年代版本(多线程)CMS收集器:并行标记扫描收集器(老年代、低停顿、多线程)

2022-11-23 17:13:08 866

原创 Android开发——模块化、组件化、插件化、热修复【简单理解】

热修复与插件化都利用classloader实现加载新功能。热修复比插件化复杂,插件化只是增加新的功能或资源文件,所以不涉及抢先加载旧类的使命。热修复为了修复bug,要将新的同名类替旧的同名bug类,要抢在加载bug类之前加载新的类。模块化、组件化、插件化通讯方式不同之处模块化相互引入,抽取了公共的common模块,其他模块自然要引入这个module。组件化主流是隐式和路由。隐式使解耦和灵活大大降低,因此路由是主流。插件化本身是不同进程,因此是binder机制进程间通讯。

2022-11-22 21:03:46 112

原创 Android APK安装过程【手把手细节解析】

data/app ---------------用户程序安装的目录。用户 安装时把apk文件 复制 到此目录 data/data ---------------存放应用程序的数据 data/dalvik-cache--------将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)第三方应用安装,通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面.

2022-11-21 16:53:26 912

原创 Android activity六种数据传递类型+【示例详细解说】

在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据。这里我们先说一说原理,然后在看看代码和例子。:我们需要从Activity_1启动并传递数据到Activity_2,Activity_2只需要接收来自Activity_1 的数据,但并不用做其他操作。:我们需要从Activity_1 启动Activity_2,同时希望Activity_2在销毁的时候向Activity_1传递数据。

2022-11-17 16:51:49 81

原创 Android API—序列化与反序列化学习+案例

序列化与反序列化的操作,一帮用于单机程序的配置保存,特别是哪些单机的应用程序,游戏,都是这个操作。应用程序:配置文件游戏: 配置文件,存档《Android核心技术》

2022-11-16 16:51:58 142

原创 Android前沿技术—Compose为啥大厂都布局

Compose作为Android新一代UI开发亮相,因为声明式开发越来越流行了,对标IOS开发SwiftUi,Compose的立项也为Android开发新加了声明式ui的开发选项,在2021年7月1.0正式版本的诞生,也意味着Compose即将进入生产环节,国际app巨头Twitter就首当其冲,在新页面上用上了Compose。

2022-11-14 21:03:47 1202

原创 Android GLide图片加载的几种常用方法

Glide是Android开发中常用的图片框架,其最基本用法例如Glide.with(context).load(url).into(imageView),我们沿着此链式调用的顺序一窥Glide图片加载流程的样貌。一图胜千言《Android核心技术》

2022-11-13 20:58:22 1664

原创 音视频——Codec初始化及Omx组件创建

Decoder构造函数中主要是创建了一个looper,每一个Decoder都需要有一个looper,因为MediaCodec是阻塞式的调用,但是NuPlayer需要的是异步操作: Decoder::Decoder。接下来主要看下OMX的allocateNode,OMX对象是通过client.interface()获取到的,首先看下OMX是怎么起来的,如下代码可以看到OMX服务是跑在MediaCodec进程中,很标准的HIDL实现。在对文档熟悉的前提下,再进行代码的开发难度就“更上一层楼”了。

2022-11-11 20:51:42 64

原创 Android APP瘦身之shrinkResources的使用与问题

对于缩小APk大小,除了开启混淆还有使用说下这两者的区别。

2022-11-10 21:05:25 58

原创 Android studio中控件TextView学习

}}@Override}}TextView :用于显示文字EditText :输入框控件Button 按钮控件ImageView 图片显示控件RadioButton 单选按钮控件CheckBox 复选框控件Android的学习之路还有很多,但是也不用着急;技术都是靠累积的,一步一步来就好哦。

2022-11-08 20:43:15 980

原创 android中gzip数据压缩与网络框架解压缩(gzip)

gzip是一种常用的压缩算法,它是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。

2022-11-07 21:29:14 340

原创 Android内存结构解析——klass内存分布

总结一下,类加载器将.class文件载入JVM中,parse后生成的是instanceKlass对象,之后会生成这个Klass类对应的镜像类实例,并将Java类中的静态变量初始化后存储在镜像类实例中。这个镜像类就是我们Java代码中的Class对象。《Android核心进阶技术》

2022-11-05 20:36:40 644

原创 Android并发编程的三个概念(原子性、可见性和有序性)

即一个操作或者多个操作,要么全部执行并且不被打断,要么就都不执行。

2022-11-03 16:53:38 209

原创 Android之触点事件处理【教学】

注:一个正常的触摸事件有ACTION_DOWN开始,中间可以存在0个或几个ACTOIN_MOVE,最后以ACTION_UP结束,开始触摸–>(移动)–>停止触摸。

2022-11-02 21:14:06 157

空空如也

空空如也

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

TA关注的人

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