自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

柒月

相濡以沫不如相忘于江湖

  • 博客(61)
  • 资源 (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 2058 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 868 2

原创 Watchdog-最后的看门狗

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

2021-02-26 11:56:37 792

原创 App启动流程

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

2019-07-01 16:06:38 247

原创 一次Android权限删除经历

**1.事发经过**近期google play发布了新的政策,其中一部分是限制权限使用,只允许满足条件的使用场景才能申请权限,小编所在的项目被检测出使用了RECEIVE_SMS权限,但是从app下的Androidmanifest文件中并未发现有该权限的注册,所以该权限是哪里来的呢?2.初步定位首先使用android studio查看了打包出来的apk中的Androidmanifest文件...

2018-12-27 13:06:17 1543 5

原创 LinearLayout的测量流程

在日常开发中我们常常使用LinearLayout作为布局Group,本文从其源码实现出发分析测量流程。大家可以带着问题进入下面的分析流程,看看是否能找到答案。

2024-07-08 21:00:52 146

原创 Java多线程

日常开发中我们常常需要使用到多线程来充分利用cpu实现高效执行,这其中需要我们多线程的执行和线程安全有充分的了解,本文主要围绕相关问题展开。

2024-07-01 20:29:18 1368

原创 基于栈和寄存器的指令集对比

在学习Java的时候我们知道,Java是基于栈的字节码解释执行,而很多PC的都是基于寄存器来执行的,那么这两种有什么差别呢?

2024-07-01 15:14:20 241

原创 Java对象创建过程

在日常开发中,我们常常需要创建对象,那么通过new关键字创建对象的执行中涉及到哪些流程呢?本文主要围绕这个问题来展开。

2024-06-29 17:34:12 616

原创 DiskLRUCache

是Android中实现磁盘缓存相关的组件类,当缓存满时其使用最近最少使用策略来淘汰相关的元素,以控制缓存大小。本文主要基于DiskLRUCache相关源码分析DiskLRUCache的创建、缓存的添加、获取、删除流程。

2024-06-25 20:11:51 556

原创 LRUCache

LRUCache是Android中实现内存缓存相关的组件类,当缓存满时其使用最近最少使用策略来淘汰相关的元素,以控制缓存大小。本文主要基于LRUCache相关源码分析LRUCache的创建、缓存的添加、获取、删除流程。

2024-06-25 17:03:55 664

原创 Android中常见的线程池

日常开发中我们常常使用到线程池,其能有效管理线程资源,避免过多线程导致系统资源浪费、又能复用线程资源,避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类,本文主要记录该类相关的知识点。

2024-06-25 14:28:15 898

原创 Activity中Window与View的关系

本文主要记录在Activity中View与Window相互作用关系,以及如何管理Window的展示、删除和更新。

2024-06-24 21:16:21 184

原创 Android动画

Android开发中我们经常使用动画来实现复杂的动态效果,本文通过记录和梳理动画相关使用和原理,以巩固相关知识点。

2024-06-24 18:31:42 503

原创 LayoutInflater加载流程

LayoutInflater在日常的Android开发中是经常使用的类,常常用于XML中View的加载相关流程。本文主要总结一些其常见api的源码流程。

2024-06-24 14:47:09 927

原创 Google Play政策审核强度真的变态

Google Play:你涉嫌虚假宣传,好人卡没收

2024-05-13 17:02:18 216

原创 要不还是别搞Google Play了

好消息:误导性条款合规了坏消息: 应用被暂停了,太难玩了

2024-05-13 16:54:55 782 2

原创 Glide系列-自定义ModuleLoader

身为android开发的你有没有遇到过Glide默认不支持的模型类型,或者需要对图片加载过程进行特殊定制的情况呢?本文将给你答案

2024-04-07 18:30:34 858

原创 如何实现基于OkHttp的网络监控

人一部分的愤怒来自于无法接受想到和做到之间的巨大差距!!!本篇文章主要是介绍如何基于okhttp来实现网络请求的监控,可能很多同学要问,为啥要监控?监控主要的目标就是真实呈现和还原线上用户的使用状况,为应用整体优化提供指标和方向。平常我们在开发环境中普遍网络状况还是很好的,不能很好的反应出线上用户真实的使用情况。而加入监控后,可以从数据中发现用户的真实使用情况,并拆分请求过程中每个阶段的耗时和失败原因,然后再给予相关指标来进行优化(把锅甩出去)。了解OkHttp因为是基于OkHttp来实现监控,..

2021-11-20 15:07:24 2165

原创 BlockCanary介绍

BlockCanary是什么BlockCanary是一个Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复。取名为BlockCanary则是为了向LeakCanary致敬,顺便本库的UI部分是从LeakCanary改来的。BlockCanary设计原理上图是BlockCanary的工作流程图,整个流程分为三个部分,分别是监控卡顿、捕获现场、保存.

2021-11-15 21:51:37 3705

原创 Aop相关工具对比

工具简介原理特点相关资源aspectJAspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,其他很多AOP框架都借鉴或采纳其中的一些思想。AspectJ在代码编译期间,将需要集成的代码插入到目标代码的前面或者后面,以实现代码的AOP。详解????不能直接用于android,需要配置一些gradle1.Jake Warton开发的日志打印工具;2.面向切面变成cglib + dexmakercglib是一个功能强大,高性能的代码生成包。在Java开发中,.

2021-11-07 14:31:33 1750

原创 探秘kotlin的语法糖

kotlin是Java最好的语法糖高阶函数函数是对过程的抽象,普通函数有一个限定条件是函数的参数和返回值必须是具体的类型,而高阶函数则去处了这个限定条件,允许函数的参数和返回值是函数类型。 fun build(test: ()-> String){ test() }上述kotlin代码中build方法允许传入一个()->String的函数类型,那么kotlin是怎么实现该功能的呢?反编译为Java方法如下 public final void build(@Not.

2021-05-26 08:33:06 277 2

原创 kotlin中的类型

Kotlin是Java最好的第三方库我们在使用kotlin进行开发的时候,会发现其简化了很多代码细节,使编写代码更加简洁,同时也封装了更多的内在逻辑,如果读者是从java开发转而为kotliin的使用者,那么会发现其实kotlin简介语法的实现底层都是封装的java相关细节,本文尝试从kotlin的使用入手,解读kotlin中类型相关的实现细节kotlin中的类型系统kotlin相对于Java来说,是更纯的面向对象的语言,在Java中除了对象外,还存在int等基本类型,而kotlin中是没有基本.

2021-05-23 22:31:47 335 7

原创 ClassLoader-浅析

什么是ClassLoader?ClassLoader有那些性质?ClassLoader工作原理ClassLoader注意问题

2021-03-07 23:18:00 132

原创 获取范型的实际类型

/** * @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 124

原创 Android跨线程消息机制

消息分发和处理是如何工作的?消息处理框架如何创建和启动1.创建消息循环分发对象Looper private Looper(boolean quitAllowed) { //消息储存的队列 mQueue = new MessageQueue(quitAllowed); //创建消息处理框架的线程 mThread = Thr...

2020-02-09 19:31:25 366 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 107

原创 Linux中的进程通信方式

1.管道管道是一种存在于内存中的阻塞式的跨进程通信方式。我们常常在使用的shell脚本中就存在管道的痕迹。比如:adb logcat | grep " Activity"这里就是把adb logcat的日志输出作为grep命令的输入,再比如在第一个命令行窗口执行下列mingling:mkfifo logecho "test pipe to log" > log此时会发现当前命...

2019-11-24 20:21:02 156

原创 SharePerenference原理

1.SharePerenference的存储格式2.缓存策略是怎样的3.线程安全的处理方式1.以xml文件存储key-value形式的数据,加载的方式是一次加载整个文件内容到内存中,在内存中的对应方式为,先找到所属包名的缓存ArrayMap,再根据filename找到对应的SharedPreferences的实现对象SharedPreferencesImpl.在业务中调用的api最终都委托给...

2019-10-22 09:59:33 233

原创 Android中Context和Resource之间的关系

application的context和activity的context是同一个吗?resource和context resourceManager AssetManger的关系?activiity之间的Resource assetManager是同一个吗?Resource Context contextImpl ResourceImp在什么时候被创建?资源是怎么根据查找的?资源是怎么...

2019-10-20 17:36:42 1520

原创 ArrayMap源码分析

存储结构默认大小线程安全扩容机制删除策略

2019-09-02 14:03:36 134

原创 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 219

原创 外观模式

定义要求一个子系统的外部和其内部的通信必须使用一个统一的对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用外观模式本质上是在子系统和客户端之间加了一层访问入库层(中间层),中间层可以由子系统提供,也可以由客户端自己封装。如果子系统提供,则该层负责两件事:1.控制子系统的访问范围 2.封装自己实现细节,简化客户端使用难度。 如果由客户端提供,则一般是用作隔离和适配,通过减少直接依赖...

2019-07-15 20:43:23 105

原创 策略模式

定义策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式从定义中来看,策略模式的目标是优化类的行为选择,将选择行为和行为本身实现细节拆分,达到选择行为只控制流程,比如你要从A地到达B地,现在你有三种交通方式,汽车,自行车,火车。三种方式的耗时,路线选择都不一样。如果采取策略模式来描述这个场景,则选择何种交通方式就是在控制流程...

2019-07-12 08:55:18 99

原创 装饰器模式

定义装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装装饰器模式是对象结构动态修改方式,相较于继承关系,装饰器更加灵活,和代理模式相比,装饰器模式更偏重与对象本质行为或者属性的加强,比如窗口系统添加主题。而代理模式则更偏重于非本质行为的添加,比如文件系统中添加权限管理和修改日志。...

2019-07-10 22:25:56 103

原创 代理模式

定义代理模式(Proxy Pattern):给某一个对象提供一个代理或者占位符,并由代理对象控制对原对象的访问。我的理解是代理模式是对真实对象行为的访问控制,而非对其本身行为的加强,这样既能保证真实对象的功能纯净性,又允许对其功能流程进行修改,同时能保证对客户端透明。而包装模式则是对真实对象行为的加强。比如拳击手与其经纪人的关系是代理关系,而拳击手与其拳击手套的关系则偏重于包装关系。实例...

2019-07-02 14:43:45 110

原创 责任链模式

定义责任链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。从定义可以看出,责任链模式将请求发送者和处理者解偶,即发送方不用知道谁来处理他的请求(没有类依赖),同时集中的处理者结构允许多个处理者共享请求和分...

2019-06-26 15:43:16 90

原创 组合模式

定义将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性释义:该模式属于结构型模式,主要用于处理对象与对象之间的包含关系和分层关系,比如文件系统,XML文件等单个对象与组合对象的使用一致性表示需要抽象出其相同的地方,比如文件系统中文件和目录都具有文字,是否隐藏,权限控制等。角色介绍:Component 是组合中的对象声明接口,在适当...

2019-06-24 16:20:49 88

原创 原型模式

定义Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype. (使用原型实例指定将要创建的对象类型,通过复制这个实例创建新的对象。)从定义中我们我们可以发现,该模式的前提是首先需要有一个对象,然后基于已有的对象...

2019-06-22 20:10:29 104

原创 建造者模式

定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。所谓的对象构建是指创建一个对象,并完成初始化操作,使对象能被客户端正确访问,比如你创建一个车new Car(),但是该车都还没有组装引擎,方向盘什么的,客户端根本不能开动。而“同样的构建过程可以创建多种标示”的意思是对象的初始化允许客户端参与和控制,也就是该模式会抽象出对象行为。角色介绍抽象建造者角色:提供一...

2019-06-21 18:08:27 68

26-Proxy_06-第十二模式.mp4

Java设计模式精讲-代理模式2

2021-09-06

21-Proxy_01-第十二模式.mp4

Java设计模式精讲-代理模式

2021-09-06

腾讯笔试算法题集.zip

腾讯笔试算法题集,附带答案

2021-03-04

马士兵老师HashMap学习笔记

马士兵老师HashMap学习笔记

2021-02-28

马士兵老师spring框架学习笔记

马士兵老师spring框架学习笔记

2021-02-28

马士兵 mybatis学习笔记

马士兵老师mybatis相关学习笔记

2021-02-28

阿里热修复技术;学会年薪50w.mp4

详细介绍热修复技术的技术细节

2021-02-22

APK安装原理.mp4

android apk安装流程

2021-02-21

MVVM与DataBinding.avi

JetPack中MVVM和DataBinding相关源码解读

2021-02-21

Handler Message源码分析及手写实现02.mp4

Android Handler Message源码解析和手写实现

2021-02-21

马士兵多线程训练营笔记

马士兵多线程训练营笔记

2021-02-21

马士兵多线程笔记.zip

马士兵多线程训练营上课笔记

2021-02-21

2020Android面试宝典.pdf

面试宝典,包含字节、阿里、腾讯等一线大厂的面试经验

2021-02-20

多线程高并发笔记.md

多线程高并发马士兵老师的课堂笔记

2021-02-20

Git 核心用法和概念详解-讲义.pdf

详细讲解git中相关概念和核型用法,比如pull、push、head、merge等

2021-02-20

apk生成与安装.xmind

apk编译和安装流程

2021-02-20

高性能Android应用开发.pdf

高性能Android应用开发中文版,详细介绍Android开发中遇到的性能问题

2019-06-26

空空如也

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

TA关注的人

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