- 博客(63)
- 资源 (19)
- 收藏
- 关注

原创 Glide系列-Webp如何被解析使用
上周接到leader吩咐,说项目中feed流占用的内存有点大,而且在低端手机上页面渲染很慢,需要排查下。所以大致梳理了下Glide中Webp资源的解析过程。如有不正确的地方,烦请斧正,一起进步。如何通过Glide加载Wepb并展示目前博主所在的项目使用的第三方开源库来加载webp的,所以第一步????添加依赖implementation "com.github.bumptech.glide:glide:4.8.0"implementation "com.github.bumptech.glide:o
2021-12-04 18:04:59
2309
1

原创 Android-Crash处理和拦截
日常开发过程中,我们肯定有遇到app崩溃的情况,很多少时候,会有系统弹出提示:,那么系统是怎么捕获到App崩溃并弹出提示框的呢?更进一步,如果我想在子线程crash时,app不被杀死,要怎么实现呢?带着这些疑问,我去探究了一下Android的crash处理原理。背景知识做Android开发的小伙伴都知道,Android是基于Java线程+消息队列来实现的。而Java的Crash处理机制也是和线程息息相关的。在Java的Thread类源码中可以看到如下接口:public interface Unca
2021-03-14 15:10:52
1170
2

原创 Watchdog-最后的看门狗
Watchdog是什么Watchdog是android framework中一个java类(在线源码), 也可以认为是一种系统检查和处理的机制。比如在Android系统中,SystemServer进程会对应用程序进行卡顿检测和处理(即ANR检测等),那么谁来检测和处理SystemServer进程的服务呢?如果AMS、PMS等核心服务出现了卡死谁来处理呢?答案是Watchdog,在Android中,设计了Watchdog机制来检测和处理系统核心服务是否能正常工作。Watchdog怎么工作Watchdo.
2021-02-26 11:56:37
950

原创 App启动流程
1.涉及到的类介绍:因为Android的框架设计时建立在Client-Server结构上,所以下面分Client和Server两端来介绍相关类Client端:表示一个应用端Activity:Android中活动组件,每一个Activity多对应一个Window,多个Window叠加后被SurfaceFling处理显示ActivityThread:Android应用的入口类,主要用于开启消息...
2019-07-01 16:06:38
281

原创 一次Android权限删除经历
**1.事发经过**近期google play发布了新的政策,其中一部分是限制权限使用,只允许满足条件的使用场景才能申请权限,小编所在的项目被检测出使用了RECEIVE_SMS权限,但是从app下的Androidmanifest文件中并未发现有该权限的注册,所以该权限是哪里来的呢?2.初步定位首先使用android studio查看了打包出来的apk中的Androidmanifest文件...
2018-12-27 13:06:17
1631
5
原创 休闲时光好去处:适合上班摸鱼的网页游戏平台,游戏党必备
它的游戏选择丰富,既有适合短暂休息时玩的休闲小游戏,也有适合深度体验的精品游戏。最重要的是,平台持续更新的特点确保了玩家总能发现新的有趣内容。今天为大家精选了4个优质的在线游戏平台,让您在闲暇时光轻松享受游戏的乐趣。以上就是本次为大家带来的游戏平台推荐,希望能帮助大家在繁忙之余找到属于自己的快乐时光!如需转载请注明来源。这是一个新兴的游戏平台,提供海量精选在线游戏。经典游戏:收录多款经典热门游戏,如神庙逃亡、地铁跑酷等。优质的游戏体验:所有游戏都经过精心筛选和优化。多人游戏:提供丰富的多人联机游戏选择。
2024-12-04 12:54:35
476
原创 LinearLayout的测量流程
在日常开发中我们常常使用LinearLayout作为布局Group,本文从其源码实现出发分析测量流程。大家可以带着问题进入下面的分析流程,看看是否能找到答案。
2024-07-08 21:00:52
245
原创 Java多线程
日常开发中我们常常需要使用到多线程来充分利用cpu实现高效执行,这其中需要我们多线程的执行和线程安全有充分的了解,本文主要围绕相关问题展开。
2024-07-01 20:29:18
1415
1
原创 基于栈和寄存器的指令集对比
在学习Java的时候我们知道,Java是基于栈的字节码解释执行,而很多PC的都是基于寄存器来执行的,那么这两种有什么差别呢?
2024-07-01 15:14:20
294
原创 DiskLRUCache
是Android中实现磁盘缓存相关的组件类,当缓存满时其使用最近最少使用策略来淘汰相关的元素,以控制缓存大小。本文主要基于DiskLRUCache相关源码分析DiskLRUCache的创建、缓存的添加、获取、删除流程。
2024-06-25 20:11:51
632
原创 LRUCache
LRUCache是Android中实现内存缓存相关的组件类,当缓存满时其使用最近最少使用策略来淘汰相关的元素,以控制缓存大小。本文主要基于LRUCache相关源码分析LRUCache的创建、缓存的添加、获取、删除流程。
2024-06-25 17:03:55
715
原创 Android中常见的线程池
日常开发中我们常常使用到线程池,其能有效管理线程资源,避免过多线程导致系统资源浪费、又能复用线程资源,避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类,本文主要记录该类相关的知识点。
2024-06-25 14:28:15
960
原创 Activity中Window与View的关系
本文主要记录在Activity中View与Window相互作用关系,以及如何管理Window的展示、删除和更新。
2024-06-24 21:16:21
214
原创 LayoutInflater加载流程
LayoutInflater在日常的Android开发中是经常使用的类,常常用于XML中View的加载相关流程。本文主要总结一些其常见api的源码流程。
2024-06-24 14:47:09
978
原创 Glide系列-自定义ModuleLoader
身为android开发的你有没有遇到过Glide默认不支持的模型类型,或者需要对图片加载过程进行特殊定制的情况呢?本文将给你答案
2024-04-07 18:30:34
1255
原创 如何实现基于OkHttp的网络监控
人一部分的愤怒来自于无法接受想到和做到之间的巨大差距!!!本篇文章主要是介绍如何基于okhttp来实现网络请求的监控,可能很多同学要问,为啥要监控?监控主要的目标就是真实呈现和还原线上用户的使用状况,为应用整体优化提供指标和方向。平常我们在开发环境中普遍网络状况还是很好的,不能很好的反应出线上用户真实的使用情况。而加入监控后,可以从数据中发现用户的真实使用情况,并拆分请求过程中每个阶段的耗时和失败原因,然后再给予相关指标来进行优化(把锅甩出去)。了解OkHttp因为是基于OkHttp来实现监控,..
2021-11-20 15:07:24
2416
原创 BlockCanary介绍
BlockCanary是什么BlockCanary是一个Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复。取名为BlockCanary则是为了向LeakCanary致敬,顺便本库的UI部分是从LeakCanary改来的。BlockCanary设计原理上图是BlockCanary的工作流程图,整个流程分为三个部分,分别是监控卡顿、捕获现场、保存.
2021-11-15 21:51:37
3907
原创 Aop相关工具对比
工具简介原理特点相关资源aspectJAspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,其他很多AOP框架都借鉴或采纳其中的一些思想。AspectJ在代码编译期间,将需要集成的代码插入到目标代码的前面或者后面,以实现代码的AOP。详解????不能直接用于android,需要配置一些gradle1.Jake Warton开发的日志打印工具;2.面向切面变成cglib + dexmakercglib是一个功能强大,高性能的代码生成包。在Java开发中,.
2021-11-07 14:31:33
1809
原创 探秘kotlin的语法糖
kotlin是Java最好的语法糖高阶函数函数是对过程的抽象,普通函数有一个限定条件是函数的参数和返回值必须是具体的类型,而高阶函数则去处了这个限定条件,允许函数的参数和返回值是函数类型。 fun build(test: ()-> String){ test() }上述kotlin代码中build方法允许传入一个()->String的函数类型,那么kotlin是怎么实现该功能的呢?反编译为Java方法如下 public final void build(@Not.
2021-05-26 08:33:06
330
2
原创 kotlin中的类型
Kotlin是Java最好的第三方库我们在使用kotlin进行开发的时候,会发现其简化了很多代码细节,使编写代码更加简洁,同时也封装了更多的内在逻辑,如果读者是从java开发转而为kotliin的使用者,那么会发现其实kotlin简介语法的实现底层都是封装的java相关细节,本文尝试从kotlin的使用入手,解读kotlin中类型相关的实现细节kotlin中的类型系统kotlin相对于Java来说,是更纯的面向对象的语言,在Java中除了对象外,还存在int等基本类型,而kotlin中是没有基本.
2021-05-23 22:31:47
385
7
原创 ClassLoader-浅析
什么是ClassLoader?ClassLoader有那些性质?ClassLoader工作原理ClassLoader注意问题
2021-03-07 23:18:00
160
原创 获取范型的实际类型
/** * @Description 获取范型实际类型 * @param clazz 当前class * @param genericIndex 当前Class中第几个范型 */ public static Class getGenericClass(Class clazz, int genericIndex){ Type genericSuperclass = clazz.getGenericSuperclass(); ParameterizedType p..
2021-02-26 21:52:06
149
原创 Android跨线程消息机制
消息分发和处理是如何工作的?消息处理框架如何创建和启动1.创建消息循环分发对象Looper private Looper(boolean quitAllowed) { //消息储存的队列 mQueue = new MessageQueue(quitAllowed); //创建消息处理框架的线程 mThread = Thr...
2020-02-09 19:31:25
409
1
原创 flutter环境搭建
1.下载flutter的sdk下载地址:https://flutter.dev/docs/get-started/install/下载完成后需要先解压下载的zip:unzip ~/Downloads/flutter_macos_v1.9.1+hotfix.6-stable.zip然后设置flutter命令行在当前窗口可执行export PATH="$PATH:`pwd`/flutter...
2019-11-25 20:29:11
141
原创 Linux中的进程通信方式
1.管道管道是一种存在于内存中的阻塞式的跨进程通信方式。我们常常在使用的shell脚本中就存在管道的痕迹。比如:adb logcat | grep " Activity"这里就是把adb logcat的日志输出作为grep命令的输入,再比如在第一个命令行窗口执行下列mingling:mkfifo logecho "test pipe to log" > log此时会发现当前命...
2019-11-24 20:21:02
188
原创 SharePerenference原理
1.SharePerenference的存储格式2.缓存策略是怎样的3.线程安全的处理方式1.以xml文件存储key-value形式的数据,加载的方式是一次加载整个文件内容到内存中,在内存中的对应方式为,先找到所属包名的缓存ArrayMap,再根据filename找到对应的SharedPreferences的实现对象SharedPreferencesImpl.在业务中调用的api最终都委托给...
2019-10-22 09:59:33
258
原创 Android中Context和Resource之间的关系
application的context和activity的context是同一个吗?resource和context resourceManager AssetManger的关系?activiity之间的Resource assetManager是同一个吗?Resource Context contextImpl ResourceImp在什么时候被创建?资源是怎么根据查找的?资源是怎么...
2019-10-20 17:36:42
1671
原创 SparseArray源码分析
存储结构默认大小线程安全扩容机制删除策略适用场景数组10否size * 2延迟删除数据小于1000,key为int类型创建集合对象 private boolean mGarbage = false; private int[] mKeys; private Object[] mValues; private int mSi...
2019-08-26 19:24:22
247
原创 外观模式
定义要求一个子系统的外部和其内部的通信必须使用一个统一的对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用外观模式本质上是在子系统和客户端之间加了一层访问入库层(中间层),中间层可以由子系统提供,也可以由客户端自己封装。如果子系统提供,则该层负责两件事:1.控制子系统的访问范围 2.封装自己实现细节,简化客户端使用难度。 如果由客户端提供,则一般是用作隔离和适配,通过减少直接依赖...
2019-07-15 20:43:23
132
原创 策略模式
定义策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式从定义中来看,策略模式的目标是优化类的行为选择,将选择行为和行为本身实现细节拆分,达到选择行为只控制流程,比如你要从A地到达B地,现在你有三种交通方式,汽车,自行车,火车。三种方式的耗时,路线选择都不一样。如果采取策略模式来描述这个场景,则选择何种交通方式就是在控制流程...
2019-07-12 08:55:18
129
原创 装饰器模式
定义装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装装饰器模式是对象结构动态修改方式,相较于继承关系,装饰器更加灵活,和代理模式相比,装饰器模式更偏重与对象本质行为或者属性的加强,比如窗口系统添加主题。而代理模式则更偏重于非本质行为的添加,比如文件系统中添加权限管理和修改日志。...
2019-07-10 22:25:56
135
原创 代理模式
定义代理模式(Proxy Pattern):给某一个对象提供一个代理或者占位符,并由代理对象控制对原对象的访问。我的理解是代理模式是对真实对象行为的访问控制,而非对其本身行为的加强,这样既能保证真实对象的功能纯净性,又允许对其功能流程进行修改,同时能保证对客户端透明。而包装模式则是对真实对象行为的加强。比如拳击手与其经纪人的关系是代理关系,而拳击手与其拳击手套的关系则偏重于包装关系。实例...
2019-07-02 14:43:45
137
原创 责任链模式
定义责任链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。从定义可以看出,责任链模式将请求发送者和处理者解偶,即发送方不用知道谁来处理他的请求(没有类依赖),同时集中的处理者结构允许多个处理者共享请求和分...
2019-06-26 15:43:16
118
原创 组合模式
定义将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性释义:该模式属于结构型模式,主要用于处理对象与对象之间的包含关系和分层关系,比如文件系统,XML文件等单个对象与组合对象的使用一致性表示需要抽象出其相同的地方,比如文件系统中文件和目录都具有文字,是否隐藏,权限控制等。角色介绍:Component 是组合中的对象声明接口,在适当...
2019-06-24 16:20:49
121
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人