自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小孟来码的博客

分享和记录Android相关技术

  • 博客(75)
  • 收藏
  • 关注

原创 一篇文章搞定《JVM的完美图解》

1、双亲委托机制2、类加载过程、加载、链接、初始化3、JVM内存结构图、方法区、堆、栈、本地方法栈、程序计数器、4、对象的组成、对象头、示例数据、对齐字节、5、JVM中怎么确定一个对象是否可以GC、引用计数法(早期策略)、可达性分析算法(主流方案)、6、Android中有哪些GC Roots、7、对象引用分类、强引用(Strong Reference)、软引用(Sofe Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)、8、Finalize()

2023-07-13 21:49:32 6345

原创 一篇文章搞定《Android事件分发》

事件分发是将屏幕触控信息分发给控件树的一个套机制。 当我们触摸屏幕时,会产生一系列的MotionEvent事件对象,经过控件树的管理者ViewRootImpl,调用view的dispatchPointerEvnet方法进行分发。onTouch、onTouchEvent、onLongClick、onClick之间的关系enable对事件的影响深入学习事件分发机制,是为了解决在Android开发中遇到的滑动冲突问题做准备。事件分发机制描述了用户的手势一系列事件是如何被Android系统传递并消费的。

2023-05-25 11:41:58 10118 1

原创 一篇文章搞定《Android权限问题(全版本)》

如果你只是想快速的完成你Android权限申请的工作,那么直接上工具PermissionX如果是想真正的了解Android的权限问题,那么建议你用15分钟通读一下本文。(可以不去实验,收藏以备后用)首先了解Android版本和SDK的关系,帮助我们分辨后面的权限版本。其次把最常见的Android7-13版本的我们需要注意的权限问题聊一下。最后是现在App都需要的动态申请权限的工具使用。

2023-02-06 17:45:03 19556 4

原创 H264码流分析和打包RTP过程

对摄像头采集的每一帧视频需要进行编码,由于视频中存在空间和时间的冗余,需要用算法来去除这些冗余。H264是专门去除这些冗余的算法,我们把这种算法称为H264编码。视频压缩算法来压缩视频的占用空间,提高存储和传输的效率,在获得有效的压缩效果的同时,使得压缩过程引起的失真最小。视频压缩算法是通过去除时间、空间的冗余来实现的。

2021-04-09 11:17:21 13330 10

原创 设计思想培养:装饰者模式下的RecyclerView添加头、尾

一个高复用、低耦合的代码不会让你在第一次去实现代码的时候感到舒服但是他会在你后面做扩展、和同类需求的时候,直呼真香!!!最近写需求,借用到装饰者思想做了RecyclerView的头和尾的扩展感觉很不错,赶紧拿出来说一说,嘻嘻ps:本篇文章只是帮助大家,在实现需求的过程中也能潜移默化的使用设计模式来优化代码本篇呢,只是想说一下如何去潜移默化的使用设计模式去改变我们的代码。举了一个扩展RecyclerView头和尾的例子。

2023-10-31 17:17:33 303

原创 记录一次项目中的《Recyclerview的优化》

看这篇文章可以让你了解到:在一个复杂的RecyclerView中,有数百个Item,每个Item都包含大量的数据和图像。如何有效地加载和显示这些数据,同时保持列表的平滑滚动?DiffUtil 是一个用于计算两个列表之间差异的实用工具类。它通过比较两个列表的元素,找出它们之间的差异,并生成更新操作的列表,以便进行最小化的更新操作。当然这种最小化的更新操作完全可以通过严格的去使用notify相关的API去控制,所以我认为DiffUtil是一种最小化更新操作的规范形式。

2023-09-08 19:51:38 1046

原创 一篇文章搞定《实战中的设计模式之Android版》

其实大多数可能和我一样,在开发项目的累积经验下,和对设计模式隐约的记忆下。在开发项目的过程中其实已经使用到了设计模式,但是不能自知。比如:之前开发的基于AI的一个对话IM,里面涉及到了很多的设计模式。但是都是下意识的去使用,甚至连他是那种设计模式都有些模糊。(ps:就单例模式记得最熟)本篇呢,也是对之前在IM开发中,遇到的一些设计模式,进行了认真的总结。也希望读者们可以恍然大悟!!!哎!!!!原来我这块代码用到了XXX设计模式。下面就依次的对我使用到的设计模式进行剖析(代码被我简化了)

2023-09-02 21:55:53 2192

原创 一篇文章搞定《WebView的优化及封装》

上篇对WebView大家肯定都有了一个基本的认知,和入门。本篇继续对他进行一些工程上的优化。主要原因:WebView加载过慢,影响用户体验,毕竟原生是秒开的。上面说的都是每一步的优化,这些优化是可以进行结合的。提前预加载一个WebView模版,利用本地的H5资源。之后加入到WebView的缓冲池中。比如去定义一个TemplateWebView去专门处理一些常用的比较固定的WebView页面。之后在WebViewPool中去专门添加这种比较固定的WebView页面去缓存。

2023-08-30 22:13:59 2989 1

原创 一篇文章搞定《玩转WebView》

首先本篇文章是铺垫,为了下一篇的WebView的优化。所以本文还是比较轻松的,都是说的如何去使用,保姆级入门教程哦。Android WebView在Android平台上是一个特殊的View,它能用来显示网页。WebView的内部是基于WebKit引擎来实现渲染网页。WebView的常见方法WebView常用的子类 (WebSettings类、WebViewClient类、WebChromeClient类)WebView和JavaScript的交互奥利给!!!!

2023-08-26 12:36:49 2186

原创 一篇文章搞定《网络框架OkHttp源码解析》

对于OkHttp我们需要了解一下相关网络的知识哦,所以还不了解的同学们建议先去补充一下网络相关的HTTP、TCP、UDP等知识。(要不我们来更新一篇网络的知识?作为我们的主流框架OkHttp的解析,我们准备分以下几个部分来讲述:(基于4.11版本)构建与初始化请求的发起过程核心部分:责任链拦截器整两个小问题聊一聊作为重中之重的拦截器,采用了责任链的模式,层层的请求,又层层的将结果返回回去。

2023-08-22 22:57:42 2159

原创 一篇文章搞定《图片框架Glide的三级缓存(全)》

首先三级缓存是Glide中非常重要的缓存机制,也是这种缓存机制才让我们的图片加载的效率,性能如此的高。下面我们来看看具体的三级缓存内容我们从三级缓存读取的源头、到三级缓存的获取、到三级缓存的写入都分析了。

2023-08-13 11:48:12 4000

原创 一篇文章搞定《图片框架Glide》

别走!别走!本篇文章一定不会因为Glide的庞大让你失去兴趣!!!Glide的源码,非常非常的庞大,很多人都被直接的劝退。如果你要一点点挖,解析全部的源码,那估计一个月你都解析不了这个框架的。(说实话这个库的开源作者们也不是都了解框架中的各个分支的)那么怎么办啊?借用郭霖郭老师的一句话,抽丝剥茧、点到即止!!!!!!!那么Glide我们怎么去搞呢?首先大家要明白一点,看开源库是要学习什么呢?答:(以下是我认为的学习三方框架的优先级)第一点:学习牛逼的主流程框架的搭建。

2023-08-11 17:28:29 3893

原创 一篇文章搞定《LeakCanary源码详解(全)》

首先内存泄漏前面也有讲解到,而且也是我们在工作中,常见并且一定会遇见的问题之一。大家都知道,其实内存泄漏的原因就是:最根本的原因就是该回收的对象没有被及时回收掉,导致了内存泄露。那么我们在处理这类问题的时候,一定会接触到我们的LeakCanary这个三方框架去帮助我们定位我们的内存泄漏问题。1、LeakCanary和LeakCanary2区别2、LeakCanary的快速使用3、LeakCanary基础铺垫4、LeakCanary源码解析5、LeakCanary的常见问题。

2023-08-03 10:26:03 3970 2

原创 一篇文章搞定《EventBus源码详解(全)》

最近几篇文章会对常见的三方库有一个清晰的解析。包含使用场景、基本使用、源码解析、常见问题等等几个方面。希望在源码解析的过程能学习到,三方库设计的理念和思想。本篇文章也是请到了EventBus来做客会以EventBus的v3.3.1版本对此进行解析。补:做好准备,看源码就是很崩溃的(都快给我写崩溃了)。但是源码的重要性就不用多BB了。总结就是,你看到总结了。说明你注定会变强!!!!!!!!

2023-07-27 22:46:33 3937

原创 一篇文章搞定《APP的启动流程》

前面已经铺垫了Binder、Handler、View的绘制流程那么该来看看APP的启动流程了,是如何启动了我们这些重要的组件本文会按照步骤和启动需要的成员并附带一点点源码进行讲解。以了解熟悉启动的流程为主。不会大篇幅的利用源码深入。1、冷启动、温启动、热启动2、启动中的重要成员简介3、启动的步骤详解4、启动优化(浅谈)zygote进程是由Linux中的init进程,fock出来的进程。

2023-07-25 22:38:16 3981

原创 一篇文章搞定《Handler机制》

Handler机制大家一定都不模式吧那为什么,Handler出现的频率这么高呢?面试中也是重点知识。因为Handler是支撑整个Android系统运行的基础,本质上Android系统都是由事件驱动的。而处理事件的核心就在于Handler。看下本文的目录吧,帮你解答这个问题Handler是什么Handler的结构Handler的运行模型常见的Handler问题解析先介绍一下我们都有哪些主要的成员:Handler的内容比较多,错综复杂。

2023-07-24 22:17:22 4023

原创 一篇文章搞定《AIDL详解》

首先本文是想用AIDL来实践上一篇的Binder模型C/S架构本文结构:1、什么是AIDL2、AIDL的用法3、AIDL需要注意的点AIDL,即Android Interface Definition Language,是一种在 Android 平台上用于进程间通信(IPC)的接口定义语言。它允许一个 Android 应用程序的进程与另一个应用程序的进程进行通信,实现进程间数据共享和方法调用。

2023-07-21 22:52:23 5461

原创 一篇文章搞定《理解Binder跨进程通信》

Binder我称之为Android的老母亲作为Android的重中之重,前面的《JVM完美图解》和《MMKV原理解析》都是铺垫啊兄弟们一直不敢写这个Binder的文章,但是为了一篇文章系列比较完整,还是写一下,也当算是一次全面的复习。什么是Binder(列举Android的常见的使用到Binder的)基础知识储备Binder模型图解对比其他IPC机制的优点Binder是Android中的一种进程间通信(IPC)机制,用于实现不同进程之间的通信。

2023-07-20 23:03:05 6180

原创 一篇文章搞定《MMKV原理解析》

兄弟们,这篇文章整整MMKV。有的兄弟问了,这是什么啊?嘿嘿,很简单的告诉你能废弃SP的基于mmap内存映射的key-value持久化存储组件。一样的套路,看看本篇文字结构(ps:对这种组件有时候比较纠结,是先讲使用呢?还是先说原理呢?大家给给意见)1、MMKV是什么(定义、优点)2、MMKV的使用3、SharedPreferences解析(为什么不用SP)4、MMKV原理解析(为什么用MMKV)那就按部就班往下整吧!!!

2023-07-18 23:35:45 6989

原创 一篇文章搞定《APK的包体积优化》

相信跟随过一个完整的中大型项目的同学们,到项目的中后期都会考虑进行包体积优化。那么这篇文章来帮助大家,能快速的减少你的包体积。1、APK的组成和构建2、为什么优化(简述)3、优化的顺序(性价比排序)4、具体的动手操作5、总结总结就是,不要只在开发之后进行想着优化了。程序员说的最多的就是,”我后面优化“。要在开发过程中潜移默化的去注意这些点,来提高你开发的质量。Ok 结束。

2023-07-11 10:15:36 6501

原创 自定义View实战《圆形头像》

来个经典的自定义View圆形头像。本文分为三个部分1、PorterDuffXfermode讲解2、步骤讲解和分步实战3、Glide实现圆形头像(当然带整个快速实现的方案喽)4、完整代码送给你1、PorterDuffXfermode是Android中强大而灵活的图像合成工具之一。它可以让开发者通过不同的合成模式来操作和混合图像,从而创建出各种独特的效果。2、Xfermode是Android中用于指定绘制模式的接口,通过该接口可以定义源图像和目标图像如何进行混合或合成。

2023-07-10 11:30:46 6359

原创 自定义View实战《弹幕》

前面已经学习了自定义的View《渐变色的文字》是继承View的。现在我们在继承ViewGroup来实现我们的《弹幕》View。本文分为三部分1、步骤讲解和分步实战2、缓存优化3、三方弹幕框架DanmakuFlameMaster4、第一步初步实现的完整代码继承View和ViewGroup实现的View有什么明显的区别吗?自定义View主要实现的是onMeasure和onDraw自定义ViewGroup主要实现的是onMeasure和onLayout。

2023-07-03 11:17:46 5287

原创 自定义Veiw实战《渐变的文字》

首先跟文字相关的,我们大多数会使用TextView来解决,但是我们的TextView实现的效果又很固定。当我们想实现一些独特的效果的时候,大多数为两种方法1、一种是系统提供给我们的API:SpannableString2、第二种是:自定义View画布canvas有一个方法canvas.clipRect(),调用了这个方法后接下来只会在这个区域内画内容,超出这个区域的内容就不画了。那么对于我们歌词渐变。我们先用默认颜色画出全部文本,然后呢,根据变量progress(渐变比例,范围[0,1])和方向

2023-06-28 11:49:56 6124

原创 一篇文章搞定《Android中View的绘制流程》

像事件的分发一样,View的绘制流程我也分成了三部分来讲1、怎样到达ViewRootImpl。2、到达ViewRootImpl做了什么。3、View的最终绘制之后我会利用一个自定义View的实例来反刍这篇文章,像《一篇文章搞定搞定事件分发》一样。最后可以看到调用了mView的Measure、Layout、Draw方法。我们点进去发现,在View的Measure、Layout、Draw会调用我们熟知的onMeasure()、onLayout()、onDraw()方法。

2023-06-20 14:53:26 6270

原创 一篇文章搞定《CoordinatorLayout完成电商首页》

Android中为我们提供了一些解决嵌套滑动的方式方法,本篇文章利用这些方式方法来实现和处理一下嵌套滑动,作为实战的实例。先铺垫一下NestedScrollingParent和NestedScrollingChild,后面利用CoordinatorLayout完成电商首页。1、首先Behavior是什么?Behavior是一个可以控制子View间互动的类2、Behavior能做什么?

2023-06-14 13:56:54 7244

原创 一篇文章搞定《Android嵌套滑动》

说起嵌套滑动,那不得不说起一些电商的首页。多层的列表滑动、左右滑动列表、上下滑动列表、吸顶Table。充斥着嵌套滑动。所以本文也会模拟电商的首页去讲解我们的嵌套滑动。外部与内部滑动方向不一致、外部与内部滑动方向一致、多种情况下的嵌套(电商首页)/外部拦截法、内部拦截法、现有API框架、NestedScrolling机制、ViewPage和RecyclerView、ScrollView嵌套ScrollView

2023-06-02 11:28:15 7643

原创 一篇文章搞定《Android中的ANR》

ANR的产生原因- Service Timeout:比如前台服务在20s内未执行完成,后台服务Timeout时间是前台服务的10倍,200s;- BroadcastQueue Timeout:比如前台广播在10s内未执行完成,后台60s- ContentProvider Timeout:内容提供者,在publish过超时10s;- InputDispatching Timeout: 输入事件分发超时5s,包括按键和触摸事件。

2023-05-15 18:52:37 10371 1

原创 一篇文章搞定《Android异常处理》

而所谓安全气囊,是指在 Crash 发生时,可以捕获异常,触发兜底逻辑,在程序退出前做最后的抢救接下来我们来看一下怎么实现一个安全气囊,以在 Crash 发生时做最后的抢救。Bugly简单来说就是一个第三方统计平台,可以捕捉异常,运营统计和应用升级等功能。打开我们的异常上报,点击我们的崩溃分析。就可以看到我们相关的崩溃日志了。划线了是因为我解决了改变了他的状态。1. 注册自定义DefaultUncaughtExceptionHandler2. 当异常发生时捕获异常3. 匹配异常堆栈是否符合配置,如果符

2023-05-12 15:57:47 10865 1

原创 一篇文章搞定《ViewPage2离屏加载》

这里就不讲ViewPage了,买新不买旧,用新不用旧。但是会将ViewPage和ViewPage2进行对比一下。ViewPage2是基于RecyclerView进行处理的。所以他也继承了RecyclerView的缓存和预加载机制。为了看清离屏加载的机制,可以先关闭一下预加载。

2023-05-10 13:05:09 6361

原创 一篇文章搞定《RecyclerView缓存复用机制》

本篇文章,暂时不加入预加载进行讲解。先了解缓存机制再加入预加载会很快的进行理解。如果混淆在一起会觉得很乱。RecyclerView缓存复用机制对象ViewHolder(包含列表项视图(itemView)的封装容器)目的减少对onCreateViewHolder、onBindViewHolder这2个方法的回调好处1.避免重复创建不必要的视图 2.避免重复执行昂贵的findViewById效果改善性能、提升应用响应能力、降低功耗核心类缓存结构缓存结构容器类型容量限制缓存用途。

2023-05-08 11:53:55 6526 4

原创 一篇文章搞定《Android内存泄漏》

首先我们创建对象的时候比如我们申请一个String类型的List声明为对象A这时候等号前面的A,程序会为我们分配到栈中作为引用。等号后面的new ArrayList,会被我们分配到堆中。但是由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序卡顿甚至OOM崩溃。此类情况就称为内存泄漏。

2023-05-05 15:20:12 10222 1

原创 设计模式之《责任链模式》

责任链模式可以灵活地处理多重业务逻辑,同时也能够随时调整处理顺序,提高代码的可维护性和扩展性。在Android开发中,使用责任链模式可以方便地处理网络请求、事件分发等复杂业务场景。

2023-04-10 10:09:33 1648

原创 设计模式之《观察者模式》

观察者模式是一种行为型模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式是一种常用的设计模式,它可以实现对象之间的松耦合,提高系统的可维护性和可扩展性。在Android开发中,观察者模式经常用于实现事件总线、多控件协作等功能。通过学习观察者模式,我们可以更好的理解面向对象设计的思想和原则,提高我们的设计水平和编码能力。

2023-04-07 09:52:26 1779

原创 设计模式之《代理模式》

代理模式是一种结构型的设计模式,它允许在不改变原有代码的情况下,通过增加一个代理来控制对原有对象的访问。简而言之,代理模式就是将一个对象的操作交给另一个对象来完成,这个过程隐藏了真实的对象,使得客户端只需要与代理对象交互。代理模式是一种很常见的设计模式,它允许在不修改原有代码的情况下,控制对某个对象的访问。在Android开发中,代理模式也被广泛应用,比如实现Activity权限控制、封装网络请求、实现事件回调等。掌握代理模式可以让我们更好地设计和组织代码,提高系统的可维护性和可扩展性。

2023-04-04 10:10:38 1611

原创 设计模式之《享元模式》

享元模式是一种结构型设计模式,旨在减少应用程序中对象的数量。在享元模式中,对象被分解为可共享和不可共享的部分。可共享部分被重用,由于应用程序中相同对象的需求少,这导致应用程序的内存占用较小。享元模式是一种非常有用的设计模式,可用于减少应用程序中创建对象的数量。通过抽离出可共享的部分并重用来实现内存优化。在Android应用程序中,此模式特别有用。我们可以使用该模式来重用图片、字体等资源对象。

2023-04-03 10:07:35 1376

原创 设计模式之《外观模式》

外观模式是一种结构型的设计模式,它为子系统提供一个统一的接口,以简化其复杂的内部结构,使得客户端能够更方便地访问子系统的功能。外观模式是一种可以降低系统复杂度的设计模式,它为客户端提供一个简单的接口,将子系统的复杂性隐藏在子系统之后。在Android开发中,我们可以使用外观模式来简化各个组件之间的交互,使得整个系统更易于维护和扩展。

2023-04-01 10:03:17 1434

原创 设计模式之《组合模式》

组合模式是一种结构型设计模式,它将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式允许客户端统一处理单个对象和组合对象,从而使得客户端无需区分对象的类型,简化了客户端的代码。组合模式是一种处理树形结构的常用设计模式,它可以将叶子对象和容器对象统一处理,并且支持递归操作。在Android中,组合模式可以用于创建UI界面,从而实现复杂的布局。在设计时,我们需要抽象出公共的组件类和操作,并针对叶子组件和容器组件实现不同的操作。

2023-03-30 10:13:22 1558

原创 设计模式之《桥接模式》

桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。它通过将抽象部分(如类或接口)组合到实现部分(如类或接口)中,将两者解耦,从而提高了系统的灵活性和可扩展性。桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离,使它们可以独立变化。在 Android 开发中,桥接模式可以用于处理复杂的界面设计问题,使得界面设计代码和 Android 平台分别独立变化,从而提高了系统的灵活性和可扩展性。

2023-03-29 10:39:49 1377

原创 设计模式之《过滤器模式》

过滤器模式是一种结构型设计模式,它允许你使用不同的标准(过滤器)连接请求来处理对象的链。当需要通过不同的过滤条件过滤对象时,过滤器模式非常有用。过滤器模式是一种简单而实用的设计模式,它可以帮助我们动态地过滤对象集合,并降低代码的耦合度。在 Android 开发中,过滤器模式通常用于处理列表数据的过滤,非常实用。

2023-03-28 10:52:57 1970

原创 设计模式之《装饰器模式》

装饰器模式是一种结构型设计模式,它允许动态地将责任附加到对象上,以便根据需要扩展对象功能。装饰器模式通过增加或修改现有类的功能,使得在不改变原有类的情况下,可以动态地扩展其功能特性。这种模式是一种包装模式,即利用对象组合为原始对象提供功能增强的方式。装饰器模式是一种灵活、动态的扩展对象功能的设计模式。在Android中,装饰器模式被广泛应用在View的Drawable中,从而实现各种控件的外观、动态效果等功能特性的扩展。

2023-03-26 12:28:54 1464

空空如也

空空如也

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

TA关注的人

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