自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

柒月

相濡以沫不如相忘于江湖

  • 博客(49)
  • 资源 (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 1943 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 768

原创 Watchdog-最后的看门狗

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

2021-02-26 11:56:37 741

原创 App启动流程

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

2019-07-01 16:06:38 230

原创 一次Android权限删除经历

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

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

原创 Glide系列-自定义ModuleLoader

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

2024-04-07 18:30:34 696

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

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

2021-11-20 15:07:24 2062

原创 BlockCanary介绍

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

2021-11-15 21:51:37 3476

原创 Aop相关工具对比

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

2021-11-07 14:31:33 1737

原创 探秘kotlin的语法糖

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

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

原创 kotlin中的类型

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

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

原创 ClassLoader-浅析

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

2021-03-07 23:18:00 124

原创 获取范型的实际类型

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

原创 Android跨线程消息机制

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

2020-02-09 19:31:25 348 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 96

原创 Linux中的进程通信方式

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

2019-11-24 20:21:02 147

原创 SharePerenference原理

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

2019-10-22 09:59:33 222

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

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

2019-10-20 17:36:42 1467

原创 ArrayMap源码分析

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

2019-09-02 14:03:36 119

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

原创 外观模式

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

2019-07-15 20:43:23 96

原创 策略模式

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

2019-07-12 08:55:18 95

原创 装饰器模式

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

2019-07-10 22:25:56 96

原创 代理模式

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

2019-07-02 14:43:45 103

原创 责任链模式

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

2019-06-26 15:43:16 85

原创 组合模式

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

2019-06-24 16:20:49 79

原创 原型模式

定义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 97

原创 建造者模式

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

2019-06-21 18:08:27 63

原创 工厂模式

定义工厂模式属于创建类型模式的一种,主要适用于创建多个简单对象。其最初的设计中,包含如下角色:抽象产品角色:它一般是具体产品继承的父类或者实现的接口具体产品:需要生成的目标对象产品工厂:负责根据传入的标志生成相应的产品对象工厂模式中分为三种实现,简单工厂,工厂方法和抽象工厂,随着产品和工厂的关系解偶而逐步降低类之间的耦合度,后面会详细解释相应的实现简单工厂public class ...

2019-06-21 08:19:44 90

原创 字符串最长子串

题述求一个子串的最长回文子串是常见算法题,所谓的回文子串就是正着读和反着读是一样的,其leetcode地址如下:https://leetcode.com/problems/longest-palindromic-substring/思路一根据题述,我首先想到了穷举法,即找出字符串的所有子串,并验证其是否是回文子串来找到最长回文子串:public String longestPalindr...

2019-06-19 22:05:42 436

原创 ARouter实现原理解析

相关角色:ARouter:负责提供客户端使用的Api接口,采用了门面模式,实际上内部委托给了_ARouter去处理_ARouter:路由中心控制器,负责控制整个路由的流程,通过Postcard中的信息导航客户端到目标地址(启动某个Activity或者获取某个服务的实现等)LogisticsCenter:后勤中心,负责注册路由信息到Warehouse和根据path或者Postcard到数据仓库...

2019-06-02 15:49:45 2543

原创 Python真香之爬取古诗文网

最近在学习Python相关,学习了基本的语法后想搞点事情试试,所以来爬取下古诗文网中的相关作者信息准备资料:爬取目标:爬取古诗文网的唐代作者的信息目标分析:一级页面是所有唐代作者的列表,点击名字后会跳转到作者详情页,所以这一页我们要做的就是解析出每一项作者详情页url,并且自动翻页上述是作者详情页,其中主要包含作者名字,作者简述和作者生平故事,这一页我要做的事情是解析这些数据并保存到...

2019-04-25 14:35:28 3336 5

原创 LeakCanary内存泄漏监听原理

大致流程: // Leakcanary的入口函数, public static RefWatcher install(Application application) { return refWatcher(application).listenerServiceClass(DisplayLeakService.class) .excludedRefs(Androi...

2019-04-10 19:42:10 422

原创 Android的事件分发

Android中的事件分为按键事件,触摸事件,轨迹球事件等,其中按键事件是基于焦点分发的,触摸事件是基于位置分发的,而轨迹球事件是基于焦点和位置组合分发的,关于焦点相关可以看上一篇,这一篇主要介绍触摸事件的相关分发。UI层的事件分发入口在Activity的dispatchTouchEvent方法,如下: public boolean dispatchTouchEvent(MotionEv...

2019-04-02 23:28:26 88

原创 关于View的焦点

##1.什么是View/ViewGroup的焦点,焦点的作用是什么?从广义上来说,焦点就是用户当前正在或者下一步可能操作的目标,在按键模式下(现在大部分手机都是触摸模式)一般具有焦点的View都会高亮展示,以提示用户当前可以操作的目标。从狭义上来说,焦点就是View中的mPrivateFlags成员字段被添加上了PFLAG_FOCUSED标示。##2.View和ViewGroup中hasFo...

2019-03-28 20:23:48 980

原创 Glide源码小记

Glide源码阅读要点:初始化流程缓存策略实现生命周期管理多线程处理如何支持扩展性代码如何封装源码收获

2019-03-26 23:56:11 103

原创 I/O优化知识

Linux内存知识:内存和进程的关系:创建进程时,系统会为每个进程分配一个4G大小的虚拟地址空间,且每个进程都有3G的用户空间和1G的内核空间1.32位操作系统中表示一个地址需要32bit,因此最大可表示的地址数量为pow(2,32)2.在同一时刻,一个cpu中只有一个进程在运行,cpu只能看见正在运行的进程对应的4G虚拟地址空间,进程间的切换会导致正在使用的虚拟地址的切换3.3G用户空...

2019-02-27 14:46:48 177

原创 Android内存优化实践

1.内存模型与分布我们知道android应用大多是使用java语言进行开发的,这就需要我们了解java的内存模型,此外在android中的应用都是基于Dalvik 虚拟机或者ART虚拟机,那么对这些虚拟机的内存分布也应该有所了解。上图是常见的java虚拟机的内存分布图:方法区:主要存储虚拟机加载的类信息,常量,静态变量,及时编译器编译后的代码等数据。内存优化时这一部分主要考虑是不是加载了很...

2019-02-19 18:12:55 166

原创 jni小记

读[深入理解Android卷一 全文-第二章]深入理解JNI小记注册方式:静态注册:依赖固定的命名规则(class_methodName),使用时才去寻找指针并保存动态注册:依赖JNI数据结(JNINativeMethod保存java和native之间的关系加载时机:System.loadLibarary(该函数多次重复加载相同的so库不会导致耗时正相关增加)注册时机:System.lo...

2019-01-24 15:07:34 89

原创 gitlab搭建之旅

终于,我的leader接受了我使用git进行版本管理的建议;接下来就是实践之后总结的gitlab搭建之旅的详细步骤了安装1.下载安装包我使用的是离线安装(因为公司内网网速不太好),安装包来自于清华大学TUNA开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/还可以去gitlab的官网下载:https://pack...

2019-01-07 19:03:35 139

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

Java设计模式大全

java的23中基本设计模式 熟悉java的设计模式对编程是很有帮助的希望可以提升自己

2015-04-09

Spring基本使用技巧和概念

Spring框架的部分使用技巧 配合struts和hibernate构建ssh框架 对于初学框架者有一定的帮助

2015-01-25

空空如也

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

TA关注的人

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