自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 LeakCanary检测原理和源码解析

一、引言内存泄露一直是Android开发中需要避免的问题,因此发现和定位内存泄露就是我们治理内存泄露问题的首要动作。目前市面上最流行的内存泄露排查组件非大名鼎鼎的***LeakCanary***莫属了,它能非常方便直观把内存泄漏处的引用链展示出来,有助于我们的快速定位。另外,其使用方式也十分简单友好。对于开发者而言,仅满足使用还是不够的,尽量知其所以然,于是就有了这篇源码的解析。二、使用和原理源码分析基于LeakCanary版本1.6.32.1 使用方式LeakCanary可以检测具体Acti

2021-12-28 17:20:22 1239

原创 Fragment、DialogFragment和BottomSheetDialogFragment生命周期流程源码解析

一、Fragment1.1 生命周期官方网上的Fragment声明周期。​图 1 Fragment生命周期流程图除了上述声明周期之外,也可以注册FragmentLifecycleCallbacks来插入更多Fragment状态的监听,具体有:public abstract static class FragmentLifecycleCallbacks { /** * Called right before the fragment's {@link Fragme

2021-10-22 18:46:06 867

原创 Android ServiceLoader使用详解和源码分析

一、SPI(Service Provider Interface)在介绍ServiceLoader之前,需要先说下SPI (Service Provider Interface)这个概念。SPI属于动态加载接口实现类的的一项技术,是JDK内置的一种服务提供发现机制,使用ServiceLoader去加载接口对应的实现,这样我们就不用关注实现类,ServiceLoader会告诉我们。官方文档描述为:为某个接口寻找服务的机制,类似IOC思想,将装配的控制权交给ServiceLoader。使用场景只提供服务

2021-08-23 15:30:50 313

原创 Android ServiceLoader使用详解和源码分析

一、SPI(Service Provider Interface)在介绍ServiceLoader之前,需要先说下SPI (Service Provider Interface)这个概念。SPI属于动态加载接口实现类的的一项技术,是JDK内置的一种服务提供发现机制,使用ServiceLoader去加载接口对应的实现,这样我们就不用关注实现类,ServiceLoader会告诉我们。官方文档描述为:为某个接口寻找服务的机制,类似IOC思想,将装配的控制权交给ServiceLoader。使用场景只提供服务

2021-08-03 17:19:36 776 1

原创 Android View可见性判断方法

在Android开发过程中,经常需要获取Window或某个View的可见性变化时机,以便在View的Visibility变化时进行相应的处理。目前,比较常用的判断View可见性时机的回调有onWindowVisibilityChangedonVisibilityChangedOnAttachStateChangeListener#onViewAttachedToWindow一、onWindowVisibilityChanged /** * Called when the wind

2021-07-30 13:56:08 2656

原创 消息传递和同步屏障机制全面解析

文章目录一、消息机制原理1.1 基本概念1、Handler2、MessageQueue3、Message4、Looper1.2 消息机制主流程1、发送消息2、消息入队3、消息出队4、消息分发二、同步屏障三、IdleHandler四、消息对象池3.1 创建Message对象3.2 回收Message对象五、总结一、消息机制原理Handler消息机制老生常谈了,必备八股之一。但是每次看都有新收获,故好好总结一下Handler相关知识。1.1 基本概念1、Handler用于发送和处理消息的类,有多种重载

2021-04-21 14:11:08 717

原创 Android设备屏幕信息

文章目录一、前言二、屏幕信息API2.1 基本单位2.2 WindowManager2.3 Display2.4 DisplayMetrics一、前言众所周知,由于Android碎片化严重,屏幕尺寸适配可说是Android开发中非常繁琐也令人头疼的问题。本文主要是讲解一些和屏幕信息相关的API,以便开发中,如果涉及到UI的适配,能够准确找到所需要的API来满足需求。二、屏幕信息API2.1 基本单位在开发中,设置空间布局的时候常用的一些单位有:px、dp、sp和dpi等,它们各自的含义如下。

2021-01-16 16:05:26 368

原创 DialogFragment使用详解

文章目录一、前言二、DialogFragment使用2.1 DialogFragment的创建1、重写onCreateDialog()2、重写onCreateView()2.2 DialogFragment布局不生效1、setBackgroundDrawableResource一、前言DialogFragment是用于展示弹窗的API,与Dialog不同,DialogFragment本质上是一个Fragment,也就具有Fragment所拥有的生命周期。在使用时,更容易通过生命周期回调来管理弹窗。对于复

2021-01-15 20:32:58 10219

原创 Android源码分析之LayoutInflater

文章目录一、前言二、LayoutInflater源码解析2.1 View加载流程2.2 View的创建三、onFinishInflate调用机制和时机四、root和attachRoot参数的作用一、前言近来在开发时,经常使用到inflate方法加载视图布局,并且回调onFinishInflate方法进行一些初始化的操作。顿时心血来潮,想要探究一下Layoutinflater的原理,怎么就把XML格式的布局文件加载为布局的实例对象,对于一些特殊标签,例如<merge>,<include

2020-11-01 23:01:47 207

原创 Android音视频开发(一)之基础知识

一、视频录制视频录制有两种方式:调用系统相机录制在Android中调用系统相机,通过Intent设置系统相机的Action,然后startActivity就可以启动。但这种方式在实际开发中通常不能很好满足业务需要,比如我要指定一下录制视频的码率、分辨率、预览画面的大小和视频画面的尺寸等。自定义相机录制自定义相机开发过程相对复杂,使用Android SDK提供的Camera和Mediarecorder类来完成,单纯使用Mediarecorder也能直接进行录制,但通常是前置方式来实现。相机相

2020-08-01 16:59:20 2423

原创 Viewpager和Fragment的懒加载机制

一、背景ViewPager默认加载当前页面,而且预加载当前页面的前后两个页面数据(即同时会加载3个页面的数据),如果3个页面都有网络请求,就会影响性能,影响用户体验,由此,懒加载就尤为重要了,可以在滑到哪个fragment的时候,该fragment再进行网络请求。二、懒加载所谓的懒加载,其实也就是延迟加载,就是等到该页面的UI展示给用户时,再加载该页面的数据(从网络、数据库等),而不是依靠ViewPager预加载机制提前加载两三个,甚至更多页面的数据.这样可以提高所属Activity的初始化速度,也可

2020-07-19 21:21:16 234

原创 Linux文件权限

一、Linux用户概念Linux中把用户分为文件所有者用户、所属组用户和其他用户。因此Linux文件的权限也就对应这三个用户身份。文件所有者是指创建文件的用户,只有自己才能读写文件,其他人不能读写文件。所属组用户就是把若干用户划分为一个群组,群组内的成员都有权限来读写文件。其他用户就是不属于前两种身份的用户。二、文件权限我们已经知道每个文件都有三种身份的权限限制,比如我们查看一个目录下的所有文件,如下图:可以看见所有文件的开头都是一串描述文件权限的编码。它其实分为四个部分,比如已上图oh-my-z

2020-07-19 21:16:38 124

原创 RecyclerView进阶(二)ItemDecoration之分组栏的吸顶效果

在RecyclerView进阶(一)之分割线、添加Header和Footer展示过一个类似微信通讯录的粘性头部效果。这篇文章就来实现一下这个效果。像上面这种分组栏,它是通过ItemDecoration实现的;也就是说继承ItemDecoration并重写它的方法绘制出来的,注意一下:分组栏本身不是itemView,它本质上是在itemView撑开的区域上画出来的图案。普通的分组栏我们首先...

2018-12-21 10:07:25 667

原创 RecyclerView进阶(一)之分割线、添加Header和Footer

如今越来越多的开发者开始使用RecyclerView,与传统的ListView相比,它有许多优势:有更多的布局方式,更好的动画效果,更加灵活容易扩展,有局部刷新的能力等等。但不是说这样就能而完全取代ListView,毕竟它添加分割线、Header和Footer十分方便,而且自带有item的点击事件。所以使用RecyclerView还是ListView还是看具体应用场景。RecyclerView之...

2018-12-20 16:38:01 589

原创 Java反射之具体使用

一、反射反射机制在Java中十分重要,那到底什么是反射机制?举个例子,正常情况下如果已经有一个类,那肯定可以通过类来创建对象;那么如果现在要求通过一个对象来找到一个类的名称,就需要反射机制了。在反射操作中,一定要把握住一个核心概念:“一切的操作都将使用Object完成,类、数组的引用都可以用Object接收”。谷歌一下定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所...

2018-11-19 20:34:18 117

原创 Android动画详解(二)插值器

在上一篇Android动画详解(一)补间动画中我们提到过一个叫插值器的东西,看名字一头雾水完全不知道是什么神奇玩意。其实用人话翻译过来就是速度模型或者速度曲线的意思。为动画设置插值器就是设定动画的速度模型,就是设置它是怎么动的,先加速再加速呀、一直减速呀、匀速的运动啊。插值器不只是补间动画需要设置啊,后面要讲的属性动画一样有插值器。具体效果一看动图便知。1、AccelerateDecelerat...

2018-11-16 16:12:15 126

原创 Android动画详解(一)补间动画

一、概述Android中常用到的动画有三种,分别是:帧动画、补间动画和属性动画。1、帧(Frame)动画​ 帧动画的原理和电影一样,就是把一系列静态图片按一定顺序播放,利用人眼的视觉暂留效应使之呈现 动态效果。2、补间(Tween)动画​ 补间动画是利用视图的平移、旋转、缩放和渐变来实现动画效果。3、属性(Property)动画​ 虽然帧动画和补间动画可以实现很多动画效果,但是...

2018-11-14 20:49:03 403 1

空空如也

空空如也

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

TA关注的人

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