自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

原创 windows系统调整Docker镜像位置image location时卡死

如果我们在docker的设置中调整镜像的位置,点击apply&restart时,docker会一直loading。或者是,loading结束后,重新启动docker后,发现镜像的位置还是默认的C盘。使用windows系统的docker时,docker的默认镜像位置存储在。随着我们安装镜像的增多,这个目录的容量也会不断增加。解决办法是卸载当前的docker,安装4.16版本。这其实是docker中的一个bug。启动4.16版本后,修改镜像位置。重启后,确认修改成功。再升级到最新版本即可。

2023-08-26 11:02:05 644

原创 【Android】性能监控之帧率检测Tinydancer

Tinydancer的核心原理就是接收每次的绘制信号,实时计算两次绘制之间的间隔,转换成帧率。

2022-11-03 11:03:08 2303 1

原创 【Android】Animation和Gone不得不说的故事:分析动画对View的影响

提前掌握事件分发的知识,在分析Touch事件的时候有的放矢。熟悉Choreographer以及界面刷新流程,能够很快了解动画的执行过程。重在积累,有些知识可能当下看不出用途,用的时候才知道真舒服。

2022-10-27 14:49:03 1206 1

原创 【RxJava】从自定义Schedulers.computation到RxJava的Hook

Scheduler是Rxjava关于线程的抽象类。Schedulers封装了一些常用的线程。

2022-10-18 16:47:01 966

原创 【Andorid】提升性能:使用AsyncLayoutInflater异步加载布局

Google在SDK中给出了一个解决方案:AsyncLayoutInflater。

2022-10-08 10:31:47 1074

原创 【Android】ViewRootImpl、WindowManagerGlobal和WindowManager之间的关系

Activity创建PhoneWindowActivity设置PhoneWindow的View和WindowManagerActivity Resume时,通过WindowManager添加ViewWindowManager实际调用的WindowManagerGlobalWindowManagerGlobal创建了ViewRootImpl,并且给ViewRootImpl设置View。

2022-09-29 14:19:31 1109

原创 【Android】界面是如何刷新的流程

接收到更新界面请求添加回调到队列中接收到屏幕发送的同步信号,从队列中取出回调执行回调执行的方法,调用View的相关方法,更新界面。

2022-09-29 11:55:47 2030

原创 【Android】获取导航栏、状态栏高度

获取系统默认值

2022-09-20 10:37:27 8188 1

原创 【Android】Loader及LoaderManager的使用和源码分析

Loader和LoaderManager

2022-09-15 10:59:18 886

原创 【Android】日夜间模式填坑记

记录夜间模式开发

2022-09-07 10:14:12 1301

原创 【Android】【Gson】对象创建接口的调用流程

【Gson】对象创建接口的调用流程。

2022-08-16 12:05:52 275

原创 【Android】【内存优化】【减少对象创建】Android SDK对象池:Pool

内存优化

2022-08-15 16:23:48 749

原创 【Android】Gson的优化

过滤不需要解析的属性

2022-08-02 15:44:39 814

原创 【Android】TextView的性能优化:避免使用wrap_content

设置width尽量不要使用wrap_content

2022-08-02 15:37:21 1103

原创 【Android】获取当前进程名的四种方法及效率对比

...

2022-08-01 11:45:30 3438

原创 【DataBinding】更新视图的逻辑:从一个bug说起

我在项目中使用了DataBinding,但是数据并没有更新。

2022-07-21 15:29:03 321

原创 【Glide 】框架在内存使用方面的优化

理解源码不是最终目的,纸上得来终觉浅,绝知此事要躬行,学习优秀的代码,最重要的是掌握其中的思想,并应用到自己的项目中

2022-07-21 14:19:30 913

原创 【Android】判断点击位置是否在View的区域内

判断点是否在绘制区域内

2022-07-08 13:47:41 2655

原创 【Java】synchronized关键字

理解synchronized

2022-06-08 19:06:36 76

原创 【Android】Uri和R资源相互转化

Uri转R: private static final int NAME_URI_PATH_SEGMENTS = 2; private static final int TYPE_PATH_SEGMENT_INDEX = 0; private static final int NAME_PATH_SEGMENT_INDEX = 1; // android.resource://<package_name>/<resource_id> private static

2022-05-28 18:28:13 447

原创 【Glide】按照数据模型获取数据

从几个接口,看Glide如何处理复杂的模型

2022-05-27 11:08:15 384

原创 【Retrofit】Retrofit的源码解析

接口、动态代理、方法缓存、方法解析、请求适配器、响应转换器

2022-05-12 17:27:53 674

原创 【Retorfit】自定义请求适配器CallAdapter.Factory

自定义适配器

2022-05-12 11:20:35 1201

原创 【Glide】缓存大小的计算策略

正确管理app内存

2022-03-29 16:04:51 3085

原创 【Android】ActivityManager的介绍

ActivityManager虽然名为Activity管理器,其实际功能比类名描述的广泛,定义的方法涵盖了内存、进程、任务、设备等相关功能。因此,将ActivityManager理解为**AppManager**,更符合这个类。

2022-03-29 14:13:38 4420

原创 【Android】进程级别importance

Importance该进程的相对重要级别,值越小级别越高属性值说明IMPORTANCE_FOREGROUND100进程正在运行前台ui,可直接与用户发生交互。IMPORTANCE_FOREGROUND_SERVICE125进程正在运行前台服务。例如播放音乐IMPORTANCE_VISIBLE200进程正在运行一些内容,内容不与用户交互,但是对用户可见。IMPORTANCE_PERCEPTIBLE230用户无法直接感知到的进程,但是从某种程度上,

2022-03-21 18:20:14 2791

原创 【RxJava】进阶必备:lift的使用与基本原理

public final class OnSubscribeLift<T, R> implements OnSubscribe<R> { final OnSubscribe<T> parent; final Operator<? extends R, ? super T> operator; public OnSubscribeLift(OnSubscribe<T> parent, Operator<? exte

2022-03-17 14:52:54 3601

原创 【RxJava】just、from方法的基本原理

前面的关于create的文章已经介绍了,Observable被订阅时的流程。接下来看一看just的源码。just有多个重载方法,内部的实现有两种方式:通过ScalarSynchronousObservable间接调用from方法ScalarSynchronousObservablepublic static <T> Observable<T> just(final T value) { return ScalarSynchronousObservable.cr

2022-02-25 19:15:16 2165

原创 【RxJava】一次简单的create订阅执行流程

public class Observable { private OnSubscribe onSubscribe; public Observable(OnSubscribe onSubscribe) { this.onSubscribe = onSubscribe; } public static Observable create(OnSubscribe f) { return new Observable(f); }

2022-02-25 11:18:45 2011

原创 Cannot identify version of git executable: no response

启动Android Studio后,Git报了这个错误:Cannot identify version of git executable: no response重启了AS后,还是报错。通过AS菜单的 invalidate caches / Restart重启后,不再报错了。

2022-02-16 18:19:57 880

原创 Rxjava:take相关方法的使用

文章目录take(final int count):获取指定个数take(long time, TimeUnit unit):获取指定时间片段内的数据takeLast:获取最后发射的指定个数的数据takeLast与taketakeLastBuffer:把数据组合成List统一发射。takeFirst:获取第一个符合条件的数据takeWhile:获取符合条件的数据takeUntil:从一个数据源中,获取符合条件的数据take(final int count):获取指定个数public final .

2022-02-15 15:17:05 1325

原创 Rxjava:interval的使用

以固定的时间间隔不断发射数据。测试:@Testpublic void testSimple(){ Observable.interval(1, TimeUnit.SECONDS).subscribe(new Action1<Long>() { @Override public void call(Long aLong) { System.out.println("aLong = " + aLong); } .

2022-02-15 11:22:45 1489

原创 【Android】Dagger:三种方式创建Component

文章目录自动生成@[email protected]自动生成如果没有在Component内部使用@Component.Factory或者@Component.Builder注解,Dagger框架会自动生成create静态方法,用来创建Component。@Componentpublic interface ApplicationGraph { UserRepository userRepository();}调用时:ApplicationGraph

2022-02-11 17:10:50 1398

原创 【Android】Dagger:使用Provides和Binds注入

文章目录ProvidesBindsProvides前面介绍了,使用Inject注解构造方法,可以让Dagger实现注入。但是对于第三方提供的类,我们无法在构造方法上添加注解。一个汽车生产商,使用其他公司提供的发动机Engine组装汽车Car。我使用了Inject注解Car的构造方法。public class Car { private Engine engine; @Inject public Car(Engine engine) { this.engin

2022-02-11 10:55:20 1368

原创 【Android】Dagger单例模式的实现

前面介绍了Dagger框架的简单使用。可以通过Dagger创建一个Car:Car car = DaggerCarComponent.create().car();当我们试图获取两次car时:CarComponent carComponent = DaggerCarComponent.create();Car car1 = carComponent.car();Car car2 = carComponent.car();System.out.println(car1 == car2);输出

2022-02-10 14:47:19 490

原创 【Android】Dagger的简单使用

Dagger是goole提供的一款依赖注入框架,目的在于项目解耦,提高项目的灵活性。下面仅使用两个注解@Inject和@Component来入门Dagger。首先添加依赖compile 'com.google.dagger:dagger:2.23.2'annotationProcessor 'com.google.dagger:dagger-compiler:2.23.2'现在有两个类Engine和Car:public class Engine { public Engine()

2022-02-10 14:28:31 1688

原创 【Java】并发三要素:可见性、原子性、有序性

文章目录可见性原子性有序性可见性可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到。一种典型的存储器层级结构如下:由于cpu有独自的高速缓存,在多核cpu的操作系统中,如果一个值被cpu1的缓存中被更改,但是没有写入主存,此时cpu2仍旧使用旧值进行计算,就会导致可见性问题。原子性原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。经典的转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B

2022-02-08 18:05:52 166

原创 RxJava:startWith的用法

startWith的作用是在发射的数据头部添加数据。

2022-02-07 16:28:33 1159

原创 Tomcat无法启动的问题

检查是否正确配置了环境变量,JAVA_HOME和CLASSPATH都要配置。在命令行输入java可以运行成功,不代表环境变量不需要配置。如何配置:Windows 10 配置Java 环境变量

2022-01-30 17:56:16 789

原创 RxJava:concat(连接)、 concatDelayError、 concatEager的使用

文章目录concat(串行连接数据)concatDelayErrorconcatEager(并行连接数据)concat(串行连接数据)concat,翻译为连接。这个方法的作用是将多个数据源发射的数据,按照顺序进行连接。数据的顺序,只与发射源的顺序相关,与数据源的发射时间无关。就是说,即使第二个发射源先完成了所有数据的发送,发射的数据也要排到第一个发射源的数据之后。测试简单连接: @Test public void testConcat(){ List<Obs

2022-01-28 15:42:57 2019

Bonjour.rar

安装Windows迁移助手时,因为资源问题,会卡在安装Bonjour步骤。提前手动安装bonjour,可以保证迁移助手顺利完成安装。

2020-10-31

空空如也

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

TA关注的人

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