自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ConstraintLayout遇到的坑

从头看了一遍,大致意思懂了,还是没有找到答案。写demo,把变量一个一个去掉,代码一行一行比对,发现了当我把paddingStart和paddingEnd全部改成对应的paddingLeft和paddingRight时,可以正常显示了,终于找到了元凶,这一刻内心的喜悦溢于言表,不枉我周末花的大半天时间。为了降低app的卡顿率,项目做了一次优化,将首页的的滑动控件viewPager改成了viewPager2,前者是一次性加载所有的布局文件,后者只会加载目标页面的布局文件,减少了计算和绘制的时间。

2024-06-11 11:31:55 862

原创 属性动画源码分析二

执行start()方法,判断是否设置过自动取消,如果有会取消掉之前callback,判断当前线程是否有looper,没有则抛出异常,所以如果是直接在子线程中开启动画是会崩溃的,初始化动画数据,取出所有的PropertyValueHolder,调用setupSetterAndGetter方法。安卓动画有很多种,包括帧动画、补间动画、属性动画、过渡动画等,其中属性动画是平时开发中用的最多的一种动画,本文会首先分析下线上动画卡顿的例子,然后带着问题看下属性动画的源码。使用XML编写动画,我们需要在。

2023-10-15 21:23:07 100 1

原创 属性动画源码解析一

动画只能在主线程执行吗?多个动画同时执行会造成卡顿嘛?动画卡顿的本质原因是什么?values设置多个值的意义在哪自定义动画插值器估值器实现原理动画的分类属性动画是什么为什么,源码分析。

2023-08-27 15:18:18 80 1

原创 学习源码之SPI机制

首先创建一个接口和多个实现类,在main文件夹下创建resource文件夹,resource和java文件夹并列,然后在resource文件夹创建META-INF.service文件夹,在该文件夹下创建接口的全限定名的文件,最后在文件内写入每个子类的全限定类名。

2023-07-15 15:59:48 455 1

原创 jvm运行时数据区详解

1.JVM 向操作系统申请内存:JVM 第一步就是通过配置参数或者默认配置参数向操作系统申请内存空间,根据内存大小找到具体的内存分配表,然后把内存段的起始地址和终止地址分配给 JVM,JVM 获得内存空间后,会根据配置参数分配堆、栈以及方法区的内存大小2.类加载:这里主要是把class放入方法区、还有class中的静态变量和常量也要放入方法区3.执行方法及创建对象:启动 main 线程,执行 main 方法,开始执行第一行代码。

2023-06-24 09:34:33 165 1

原创 Android 混淆全面解析

Android混淆

2023-01-13 21:20:34 930

原创 WMS工作原理分析

Wms管理着所有的窗口,包括创建、删除和修改,以及将某个窗口设置为焦点窗口。一、窗口、Window和View的区别窗口由两部分构成,一部分是描述该窗口的类WindowState,另一部分是该窗口在屏幕上对应的界面Surface。window是一个类,其实现类是PhoneWindow类,Activity类实现Window.Callback接口,从而成了具有通用操作方式的窗口。View也是一个视图,是...

2018-02-24 15:35:18 3211 1

原创 Android程序包管理机制解析和PMS启动流程分析

程序包管理包含三个部分内容:提供一个能够根据intent匹配到具体的Activity、Provider、Service。即当应用程序调用startActivity(intent)时,能够把参数中指定的intent转换成一个具体的包含了程序包名称及具体Componment名称的信息,以便Java类加载器加载具体的Componment。进行权限检查。即当应用程序调用某个需要一定权限的函数时,系统判断调...

2018-02-24 14:31:55 7263

原创 Android屏幕适配图片那些事

昨天晚上无意将本是在drawable-xhdpi里面的图片直接放在drawable中,后显示出来的图片被放大好几倍,今天早上网上搜索找到了答案,现特此记录下android市场上的手机尺寸有大有小,分辨率各有不同,怎么去适配这上千种屏幕类型呢,androidStudio采用新建不同分辨率的文件夹放置对应的图片,在适配时,虚拟机会根据运行手机的手机分辨率密度查找对应的文件夹的图片,从而解决问题,在st...

2018-02-24 14:22:42 305

原创 Git关联远程服务器

1.生成SSH公私钥首先下载到git官网下载git客户端,下载完成后,要生成SSH key,即公钥和私钥,SSH属于一种加密算法,网络端的公钥必须与本地的私钥配对成功后才能提交代码。在Linux和Mac中是默认安装了SSH,Windows可以在git bash输入ssh,如生成以下提示,则表示安装成功,在git bash输入ssh-keygen -t rsa ,指定rsa算法生成秘钥,连续三个回车...

2018-02-24 14:18:54 436

原创 RxJava的使用解析(一)

RxJava越来越受到开发者的青睐,主要是因为他方便的线程切换以及简洁的流式调用,可以使用RxJava的操作符组合使用完成很多复杂的逻辑。让你用了之后,完全离不开它。本文跳过RxJava的使用,分析内部的调用源码,让你知其然,知其所以然。下面的源码解析是基于RxJava1.x.x版本的,后续会推出RxJava2的介绍文章。流程分析RxJava采用的是发布-订阅的观察者模式,它是怎么订阅的呢?Obs

2017-12-14 15:17:59 243

原创 EventBus3.0源码解析

EventBus是用于数据传输的开源第三方库,可以深度的解耦合,代码的间接性也更好,目前最新版本是EventBus3.0,我们分析的是这个版本,首先看下这个库的使用,以在Activity为例:public class MainActivity{ }

2017-12-06 16:40:34 198

原创 android系统启动流程

android系统启动流程1、开机开始给系统供电,此时硬件电路会产生一个复位时序,包括磁盘、内存、CPU和其他硬件全部要准备就绪,复位完成后,CPU开始执行第一条指令。该指令指向引导程序(Bootloader),其作用是装载真正的应用程序。2、执行操作系统内核初始化各种硬件,包括内存、网络接口、显示器、输入设备,建立各种内部数据结构,内核初始化完毕后开始运行具体的应用程序。3、运行Android程

2017-11-25 14:28:22 453

原创 Retrofit2源码分析

先来一张retrofit2 的流程图: 1.基本用例:创建Retrofit对象

2017-11-17 15:10:43 314

原创 JAVA动态代理模式源码解析

动态代理:代理类在运行时生成,即java在编译完之后并没有实际的class文件,而是在运行时生成类字节码,并加载到JVM中。实现动态代理的步骤:1、定义一个公共接口,一个目标类,目标类实现公共接口。2、自己定义一个类,即调用处理器类,实现InvocationHandler接口,代理类调用任何方法都会经过这个调用处理类3、生成代理对象

2017-11-16 14:30:18 494 1

原创 理解Android Binder架构

Binder是一种架构,包括三个模块:服务端接口、Binder驱动、客户端接口。Binder驱动:客户端和服务端共享一份物理内存,用户进程和内核进程在需要的时候建立内存映射,用完后马上释放映射,这样可以充分高效的使用系统的物理内存。当服务端创建好Binder对象后,对应会在Binder驱动中创建一个Binder类的mRemote对象,客户端请求服务端时要使用到这个mRemote对象。

2017-11-15 15:22:29 275

原创 使用AndroidStudio将工具库打成jar包和aar包

将工具库打成jar包要将工具库打成jar包,它必须是library,首先在project上new一个Module,指定为library,比如将其命名为testLib。然后让主app依赖这个库 然后在library的build.gradle中加入下面的代码: 将工具库打成aar包

2017-10-19 15:16:56 1030

原创 SugarRecord的使用和源码分析

SugarRecord的使用和源码分析SugarRecord是用来操作本地数据库的ORM框架,ORM(Object-Relational-Map)即对象映射模式,我们在操作数据库的时候,不需要和复杂的sql语句打交道,只需要调用对象的属性和方法来实现数据库的增删改查。下面来看sugarRecord的基本使用首先再gradle文件中添加依赖 compile 'com.github.satyan:

2017-09-15 18:07:02 2351 1

原创 APP启动流程

首先看张android手机系统图 从按电源键到导航界面,android初始化的组件:Loader层: Boot Rom:电源按下,引导芯片代码从固化Rom层开始执行,加载执行到RAM层, Boot Loader:这是进入android系统前的引导程序,主要检测外部RAM、网络,内存、硬件参数等。Kernel层: android系统的内核层,到在这里才刚进入android系统,启...

2017-06-26 23:52:56 618

空空如也

空空如也

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

TA关注的人

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