Android
文章平均质量分 90
小孟来码
记录并分享Android相关技术内容,在分享的过程中对Android的知识查缺补漏。
展开
-
设计思想培养:装饰者模式下的RecyclerView添加头、尾
一个高复用、低耦合的代码不会让你在第一次去实现代码的时候感到舒服但是他会在你后面做扩展、和同类需求的时候,直呼真香!!!最近写需求,借用到装饰者思想做了RecyclerView的头和尾的扩展感觉很不错,赶紧拿出来说一说,嘻嘻ps:本篇文章只是帮助大家,在实现需求的过程中也能潜移默化的使用设计模式来优化代码本篇呢,只是想说一下如何去潜移默化的使用设计模式去改变我们的代码。举了一个扩展RecyclerView头和尾的例子。原创 2023-10-31 17:17:33 · 312 阅读 · 0 评论 -
一篇文章搞定《网络框架OkHttp源码解析》
对于OkHttp我们需要了解一下相关网络的知识哦,所以还不了解的同学们建议先去补充一下网络相关的HTTP、TCP、UDP等知识。(要不我们来更新一篇网络的知识?作为我们的主流框架OkHttp的解析,我们准备分以下几个部分来讲述:(基于4.11版本)构建与初始化请求的发起过程核心部分:责任链拦截器整两个小问题聊一聊作为重中之重的拦截器,采用了责任链的模式,层层的请求,又层层的将结果返回回去。原创 2023-08-22 22:57:42 · 2163 阅读 · 0 评论 -
记录一次项目中的《Recyclerview的优化》
看这篇文章可以让你了解到:在一个复杂的RecyclerView中,有数百个Item,每个Item都包含大量的数据和图像。如何有效地加载和显示这些数据,同时保持列表的平滑滚动?DiffUtil 是一个用于计算两个列表之间差异的实用工具类。它通过比较两个列表的元素,找出它们之间的差异,并生成更新操作的列表,以便进行最小化的更新操作。当然这种最小化的更新操作完全可以通过严格的去使用notify相关的API去控制,所以我认为DiffUtil是一种最小化更新操作的规范形式。原创 2023-09-08 19:51:38 · 1050 阅读 · 0 评论 -
一篇文章搞定《实战中的设计模式之Android版》
其实大多数可能和我一样,在开发项目的累积经验下,和对设计模式隐约的记忆下。在开发项目的过程中其实已经使用到了设计模式,但是不能自知。比如:之前开发的基于AI的一个对话IM,里面涉及到了很多的设计模式。但是都是下意识的去使用,甚至连他是那种设计模式都有些模糊。(ps:就单例模式记得最熟)本篇呢,也是对之前在IM开发中,遇到的一些设计模式,进行了认真的总结。也希望读者们可以恍然大悟!!!哎!!!!原来我这块代码用到了XXX设计模式。下面就依次的对我使用到的设计模式进行剖析(代码被我简化了)原创 2023-09-02 21:55:53 · 2198 阅读 · 0 评论 -
一篇文章搞定《WebView的优化及封装》
上篇对WebView大家肯定都有了一个基本的认知,和入门。本篇继续对他进行一些工程上的优化。主要原因:WebView加载过慢,影响用户体验,毕竟原生是秒开的。上面说的都是每一步的优化,这些优化是可以进行结合的。提前预加载一个WebView模版,利用本地的H5资源。之后加入到WebView的缓冲池中。比如去定义一个TemplateWebView去专门处理一些常用的比较固定的WebView页面。之后在WebViewPool中去专门添加这种比较固定的WebView页面去缓存。原创 2023-08-30 22:13:59 · 3028 阅读 · 1 评论 -
一篇文章搞定《玩转WebView》
首先本篇文章是铺垫,为了下一篇的WebView的优化。所以本文还是比较轻松的,都是说的如何去使用,保姆级入门教程哦。Android WebView在Android平台上是一个特殊的View,它能用来显示网页。WebView的内部是基于WebKit引擎来实现渲染网页。WebView的常见方法WebView常用的子类 (WebSettings类、WebViewClient类、WebChromeClient类)WebView和JavaScript的交互奥利给!!!!原创 2023-08-26 12:36:49 · 2187 阅读 · 0 评论 -
一篇文章搞定《图片框架Glide的三级缓存(全)》
首先三级缓存是Glide中非常重要的缓存机制,也是这种缓存机制才让我们的图片加载的效率,性能如此的高。下面我们来看看具体的三级缓存内容我们从三级缓存读取的源头、到三级缓存的获取、到三级缓存的写入都分析了。原创 2023-08-13 11:48:12 · 4012 阅读 · 0 评论 -
一篇文章搞定《图片框架Glide》
别走!别走!本篇文章一定不会因为Glide的庞大让你失去兴趣!!!Glide的源码,非常非常的庞大,很多人都被直接的劝退。如果你要一点点挖,解析全部的源码,那估计一个月你都解析不了这个框架的。(说实话这个库的开源作者们也不是都了解框架中的各个分支的)那么怎么办啊?借用郭霖郭老师的一句话,抽丝剥茧、点到即止!!!!!!!那么Glide我们怎么去搞呢?首先大家要明白一点,看开源库是要学习什么呢?答:(以下是我认为的学习三方框架的优先级)第一点:学习牛逼的主流程框架的搭建。原创 2023-08-11 17:28:29 · 3895 阅读 · 0 评论 -
一篇文章搞定《LeakCanary源码详解(全)》
首先内存泄漏前面也有讲解到,而且也是我们在工作中,常见并且一定会遇见的问题之一。大家都知道,其实内存泄漏的原因就是:最根本的原因就是该回收的对象没有被及时回收掉,导致了内存泄露。那么我们在处理这类问题的时候,一定会接触到我们的LeakCanary这个三方框架去帮助我们定位我们的内存泄漏问题。1、LeakCanary和LeakCanary2区别2、LeakCanary的快速使用3、LeakCanary基础铺垫4、LeakCanary源码解析5、LeakCanary的常见问题。原创 2023-08-03 10:26:03 · 3976 阅读 · 2 评论 -
一篇文章搞定《EventBus源码详解(全)》
最近几篇文章会对常见的三方库有一个清晰的解析。包含使用场景、基本使用、源码解析、常见问题等等几个方面。希望在源码解析的过程能学习到,三方库设计的理念和思想。本篇文章也是请到了EventBus来做客会以EventBus的v3.3.1版本对此进行解析。补:做好准备,看源码就是很崩溃的(都快给我写崩溃了)。但是源码的重要性就不用多BB了。总结就是,你看到总结了。说明你注定会变强!!!!!!!!原创 2023-07-27 22:46:33 · 3942 阅读 · 0 评论 -
一篇文章搞定《APP的启动流程》
前面已经铺垫了Binder、Handler、View的绘制流程那么该来看看APP的启动流程了,是如何启动了我们这些重要的组件本文会按照步骤和启动需要的成员并附带一点点源码进行讲解。以了解熟悉启动的流程为主。不会大篇幅的利用源码深入。1、冷启动、温启动、热启动2、启动中的重要成员简介3、启动的步骤详解4、启动优化(浅谈)zygote进程是由Linux中的init进程,fock出来的进程。原创 2023-07-25 22:38:16 · 3987 阅读 · 0 评论 -
一篇文章搞定《Handler机制》
Handler机制大家一定都不模式吧那为什么,Handler出现的频率这么高呢?面试中也是重点知识。因为Handler是支撑整个Android系统运行的基础,本质上Android系统都是由事件驱动的。而处理事件的核心就在于Handler。看下本文的目录吧,帮你解答这个问题Handler是什么Handler的结构Handler的运行模型常见的Handler问题解析先介绍一下我们都有哪些主要的成员:Handler的内容比较多,错综复杂。原创 2023-07-24 22:17:22 · 4025 阅读 · 0 评论 -
一篇文章搞定《AIDL详解》
首先本文是想用AIDL来实践上一篇的Binder模型C/S架构本文结构:1、什么是AIDL2、AIDL的用法3、AIDL需要注意的点AIDL,即Android Interface Definition Language,是一种在 Android 平台上用于进程间通信(IPC)的接口定义语言。它允许一个 Android 应用程序的进程与另一个应用程序的进程进行通信,实现进程间数据共享和方法调用。原创 2023-07-21 22:52:23 · 5508 阅读 · 0 评论 -
一篇文章搞定《理解Binder跨进程通信》
Binder我称之为Android的老母亲作为Android的重中之重,前面的《JVM完美图解》和《MMKV原理解析》都是铺垫啊兄弟们一直不敢写这个Binder的文章,但是为了一篇文章系列比较完整,还是写一下,也当算是一次全面的复习。什么是Binder(列举Android的常见的使用到Binder的)基础知识储备Binder模型图解对比其他IPC机制的优点Binder是Android中的一种进程间通信(IPC)机制,用于实现不同进程之间的通信。原创 2023-07-20 23:03:05 · 6183 阅读 · 0 评论 -
一篇文章搞定《MMKV原理解析》
兄弟们,这篇文章整整MMKV。有的兄弟问了,这是什么啊?嘿嘿,很简单的告诉你能废弃SP的基于mmap内存映射的key-value持久化存储组件。一样的套路,看看本篇文字结构(ps:对这种组件有时候比较纠结,是先讲使用呢?还是先说原理呢?大家给给意见)1、MMKV是什么(定义、优点)2、MMKV的使用3、SharedPreferences解析(为什么不用SP)4、MMKV原理解析(为什么用MMKV)那就按部就班往下整吧!!!原创 2023-07-18 23:35:45 · 7022 阅读 · 0 评论 -
一篇文章搞定《APK的包体积优化》
相信跟随过一个完整的中大型项目的同学们,到项目的中后期都会考虑进行包体积优化。那么这篇文章来帮助大家,能快速的减少你的包体积。1、APK的组成和构建2、为什么优化(简述)3、优化的顺序(性价比排序)4、具体的动手操作5、总结总结就是,不要只在开发之后进行想着优化了。程序员说的最多的就是,”我后面优化“。要在开发过程中潜移默化的去注意这些点,来提高你开发的质量。Ok 结束。原创 2023-07-11 10:15:36 · 6512 阅读 · 0 评论 -
自定义View实战《圆形头像》
来个经典的自定义View圆形头像。本文分为三个部分1、PorterDuffXfermode讲解2、步骤讲解和分步实战3、Glide实现圆形头像(当然带整个快速实现的方案喽)4、完整代码送给你1、PorterDuffXfermode是Android中强大而灵活的图像合成工具之一。它可以让开发者通过不同的合成模式来操作和混合图像,从而创建出各种独特的效果。2、Xfermode是Android中用于指定绘制模式的接口,通过该接口可以定义源图像和目标图像如何进行混合或合成。原创 2023-07-10 11:30:46 · 6363 阅读 · 0 评论 -
自定义View实战《弹幕》
前面已经学习了自定义的View《渐变色的文字》是继承View的。现在我们在继承ViewGroup来实现我们的《弹幕》View。本文分为三部分1、步骤讲解和分步实战2、缓存优化3、三方弹幕框架DanmakuFlameMaster4、第一步初步实现的完整代码继承View和ViewGroup实现的View有什么明显的区别吗?自定义View主要实现的是onMeasure和onDraw自定义ViewGroup主要实现的是onMeasure和onLayout。原创 2023-07-03 11:17:46 · 5297 阅读 · 0 评论 -
自定义Veiw实战《渐变的文字》
首先跟文字相关的,我们大多数会使用TextView来解决,但是我们的TextView实现的效果又很固定。当我们想实现一些独特的效果的时候,大多数为两种方法1、一种是系统提供给我们的API:SpannableString2、第二种是:自定义View画布canvas有一个方法canvas.clipRect(),调用了这个方法后接下来只会在这个区域内画内容,超出这个区域的内容就不画了。那么对于我们歌词渐变。我们先用默认颜色画出全部文本,然后呢,根据变量progress(渐变比例,范围[0,1])和方向原创 2023-06-28 11:49:56 · 6129 阅读 · 0 评论 -
一篇文章搞定《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 · 6272 阅读 · 0 评论 -
一篇文章搞定《CoordinatorLayout完成电商首页》
Android中为我们提供了一些解决嵌套滑动的方式方法,本篇文章利用这些方式方法来实现和处理一下嵌套滑动,作为实战的实例。先铺垫一下NestedScrollingParent和NestedScrollingChild,后面利用CoordinatorLayout完成电商首页。1、首先Behavior是什么?Behavior是一个可以控制子View间互动的类2、Behavior能做什么?原创 2023-06-14 13:56:54 · 7248 阅读 · 0 评论 -
一篇文章搞定《Android嵌套滑动》
说起嵌套滑动,那不得不说起一些电商的首页。多层的列表滑动、左右滑动列表、上下滑动列表、吸顶Table。充斥着嵌套滑动。所以本文也会模拟电商的首页去讲解我们的嵌套滑动。外部与内部滑动方向不一致、外部与内部滑动方向一致、多种情况下的嵌套(电商首页)/外部拦截法、内部拦截法、现有API框架、NestedScrolling机制、ViewPage和RecyclerView、ScrollView嵌套ScrollView原创 2023-06-02 11:28:15 · 7667 阅读 · 0 评论 -
一篇文章搞定《Android事件分发》
事件分发是将屏幕触控信息分发给控件树的一个套机制。 当我们触摸屏幕时,会产生一系列的MotionEvent事件对象,经过控件树的管理者ViewRootImpl,调用view的dispatchPointerEvnet方法进行分发。onTouch、onTouchEvent、onLongClick、onClick之间的关系enable对事件的影响深入学习事件分发机制,是为了解决在Android开发中遇到的滑动冲突问题做准备。事件分发机制描述了用户的手势一系列事件是如何被Android系统传递并消费的。原创 2023-05-25 11:41:58 · 10124 阅读 · 1 评论 -
一篇文章搞定《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 · 10382 阅读 · 1 评论 -
一篇文章搞定《Android异常处理》
而所谓安全气囊,是指在 Crash 发生时,可以捕获异常,触发兜底逻辑,在程序退出前做最后的抢救接下来我们来看一下怎么实现一个安全气囊,以在 Crash 发生时做最后的抢救。Bugly简单来说就是一个第三方统计平台,可以捕捉异常,运营统计和应用升级等功能。打开我们的异常上报,点击我们的崩溃分析。就可以看到我们相关的崩溃日志了。划线了是因为我解决了改变了他的状态。1. 注册自定义DefaultUncaughtExceptionHandler2. 当异常发生时捕获异常3. 匹配异常堆栈是否符合配置,如果符原创 2023-05-12 15:57:47 · 10897 阅读 · 1 评论 -
一篇文章搞定《ViewPage2离屏加载》
这里就不讲ViewPage了,买新不买旧,用新不用旧。但是会将ViewPage和ViewPage2进行对比一下。ViewPage2是基于RecyclerView进行处理的。所以他也继承了RecyclerView的缓存和预加载机制。为了看清离屏加载的机制,可以先关闭一下预加载。原创 2023-05-10 13:05:09 · 6369 阅读 · 0 评论 -
一篇文章搞定《RecyclerView缓存复用机制》
本篇文章,暂时不加入预加载进行讲解。先了解缓存机制再加入预加载会很快的进行理解。如果混淆在一起会觉得很乱。RecyclerView缓存复用机制对象ViewHolder(包含列表项视图(itemView)的封装容器)目的减少对onCreateViewHolder、onBindViewHolder这2个方法的回调好处1.避免重复创建不必要的视图 2.避免重复执行昂贵的findViewById效果改善性能、提升应用响应能力、降低功耗核心类缓存结构缓存结构容器类型容量限制缓存用途。原创 2023-05-08 11:53:55 · 6545 阅读 · 4 评论 -
一篇文章搞定《Android内存泄漏》
首先我们创建对象的时候比如我们申请一个String类型的List声明为对象A这时候等号前面的A,程序会为我们分配到栈中作为引用。等号后面的new ArrayList,会被我们分配到堆中。但是由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序卡顿甚至OOM崩溃。此类情况就称为内存泄漏。原创 2023-05-05 15:20:12 · 10226 阅读 · 1 评论 -
Android中arm64-v8a、armeabi-v7a、armeabi是什么?
首先:ARM是神马?答:ARM是我们设备的CPU架构。其次:arm64-v8a、armeabi-v7a、armeabi是神马?答:在Android 系统上,每一个CPU架构对应一个ABI。他们就是我们的ABI类型最后:ABI是神马?答:应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。原创 2023-02-27 10:48:24 · 10227 阅读 · 0 评论 -
怎么利用Android Studio查看Android-SDK源码
但是当我们在 Android 查看源码时,经常会看到 throw new RuntimeException。就比如下面的内容。在Android开发过程中,如果想进一步了解触摸事件分发、Message等工作机制,我们需要查看Android SDK源码。原创 2023-02-17 11:26:53 · 7703 阅读 · 0 评论 -
一篇文章搞定《Android权限问题(全版本)》
如果你只是想快速的完成你Android权限申请的工作,那么直接上工具PermissionX如果是想真正的了解Android的权限问题,那么建议你用15分钟通读一下本文。(可以不去实验,收藏以备后用)首先了解Android版本和SDK的关系,帮助我们分辨后面的权限版本。其次把最常见的Android7-13版本的我们需要注意的权限问题聊一下。最后是现在App都需要的动态申请权限的工具使用。原创 2023-02-06 17:45:03 · 19693 阅读 · 4 评论 -
一篇文章搞定《Android布局优化》
Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心问题就是要解决因布局渲染性能不佳而导致应用卡顿的问题,所以它可以认为是卡顿优化的一个子集。本文主要包括以下内容:1. 为什么要进行布局优化及android绘制,布局加载原理2. 获取布局文件加载耗时的方法3. 介绍一些布局优化的手段与方法原创 2023-01-03 10:53:37 · 6472 阅读 · 0 评论 -
Kotlin系列之泛型以及与Java中泛型的区别
泛型只在编译期间有效,运行期间会被擦除,所以泛型信息会消失,Java基于栈的形式调用方法得不到泛型的具体类型,Kotlin通过内联机制,编译期间是把方法直接添加到了对应的代码中,不存在栈调用的问题,所以可以通过上下文推导出泛型的具体类型。原创 2022-11-08 11:07:10 · 6450 阅读 · 0 评论 -
Kotlin系列之data、open、object、sealed、class、inner类的种类
Kotlin系列之data、open、object、sealed、class、inner类的种类原创 2022-09-26 09:28:03 · 11144 阅读 · 0 评论 -
Kotlin系列之@JvmField、@JvmName、@JvmOverloads、@JvmStatic等注解详解
Kotlin系列之@JvmField、@JvmName、@JvmOverloads、@JvmStatic、@JvmMultifileClass、@JvmSynthetic等注解详解原创 2022-09-23 15:57:24 · 11466 阅读 · 0 评论 -
Kotlin系列之plus、minus、tiems、div、rem、inc、dec运算符函数
Kotlin系列之plus、minus、tiems、div、rem、inc、dec运算符函数原创 2022-09-23 10:04:04 · 12124 阅读 · 0 评论 -
Kotlin系列之filter、find、any、map、flatMap、takeWhile、reduce、groupBy常见高阶函数
Kotlin系列之filter、find、any、map、flatMap、takeWhile、reduce、groupBy常见高阶函数原创 2022-09-22 13:19:52 · 11128 阅读 · 0 评论 -
Kotlin系列之as、is、by、in、out、lateinit、companion、vararg、infix等关键字
Kotlin系列之as、is、by、in、out、lateinit、companion、vararg、infix等关键字原创 2022-09-19 16:56:22 · 10002 阅读 · 1 评论 -
Kotlin系列之List、Set、Map详解
Kotlin系列之List、Set、Map详解原创 2022-09-16 15:20:04 · 9796 阅读 · 0 评论 -
Kotlin系列之let 、with、run、apply、also、takeIf、takeUnless、repeat函数的使用
Kotlin系列之let 、with、run、apply、also、takeIf、takeUnless、repeat扩展函数原创 2022-09-15 14:39:03 · 11265 阅读 · 0 评论