- 博客(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 979
原创 【Android】性能监控之帧率检测Tinydancer
Tinydancer的核心原理就是接收每次的绘制信号,实时计算两次绘制之间的间隔,转换成帧率。
2022-11-03 11:03:08 2407 1
原创 【Android】Animation和Gone不得不说的故事:分析动画对View的影响
提前掌握事件分发的知识,在分析Touch事件的时候有的放矢。熟悉Choreographer以及界面刷新流程,能够很快了解动画的执行过程。重在积累,有些知识可能当下看不出用途,用的时候才知道真舒服。
2022-10-27 14:49:03 1327 1
原创 【RxJava】从自定义Schedulers.computation到RxJava的Hook
Scheduler是Rxjava关于线程的抽象类。Schedulers封装了一些常用的线程。
2022-10-18 16:47:01 1065
原创 【Andorid】提升性能:使用AsyncLayoutInflater异步加载布局
Google在SDK中给出了一个解决方案:AsyncLayoutInflater。
2022-10-08 10:31:47 1205
原创 【Android】ViewRootImpl、WindowManagerGlobal和WindowManager之间的关系
Activity创建PhoneWindowActivity设置PhoneWindow的View和WindowManagerActivity Resume时,通过WindowManager添加ViewWindowManager实际调用的WindowManagerGlobalWindowManagerGlobal创建了ViewRootImpl,并且给ViewRootImpl设置View。
2022-09-29 14:19:31 1173
原创 【Android】界面是如何刷新的流程
接收到更新界面请求添加回调到队列中接收到屏幕发送的同步信号,从队列中取出回调执行回调执行的方法,调用View的相关方法,更新界面。
2022-09-29 11:55:47 2116
原创 【Glide 】框架在内存使用方面的优化
理解源码不是最终目的,纸上得来终觉浅,绝知此事要躬行,学习优秀的代码,最重要的是掌握其中的思想,并应用到自己的项目中
2022-07-21 14:19:30 964
原创 【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 465
原创 【Android】ActivityManager的介绍
ActivityManager虽然名为Activity管理器,其实际功能比类名描述的广泛,定义的方法涵盖了内存、进程、任务、设备等相关功能。因此,将ActivityManager理解为**AppManager**,更符合这个类。
2022-03-29 14:13:38 4921
原创 【Android】进程级别importance
Importance该进程的相对重要级别,值越小级别越高属性值说明IMPORTANCE_FOREGROUND100进程正在运行前台ui,可直接与用户发生交互。IMPORTANCE_FOREGROUND_SERVICE125进程正在运行前台服务。例如播放音乐IMPORTANCE_VISIBLE200进程正在运行一些内容,内容不与用户交互,但是对用户可见。IMPORTANCE_PERCEPTIBLE230用户无法直接感知到的进程,但是从某种程度上,
2022-03-21 18:20:14 2895
原创 【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 3634
原创 【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 2223
原创 【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 2062
原创 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 935
原创 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 1565
原创 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 1592
原创 【Android】Dagger:三种方式创建Component
文章目录自动生成@Component.Factory@Component.Builder自动生成如果没有在Component内部使用@Component.Factory或者@Component.Builder注解,Dagger框架会自动生成create静态方法,用来创建Component。@Componentpublic interface ApplicationGraph { UserRepository userRepository();}调用时:ApplicationGraph
2022-02-11 17:10:50 1492
原创 【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 1588
原创 【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 538
原创 【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 1779
原创 【Java】并发三要素:可见性、原子性、有序性
文章目录可见性原子性有序性可见性可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到。一种典型的存储器层级结构如下:由于cpu有独自的高速缓存,在多核cpu的操作系统中,如果一个值被cpu1的缓存中被更改,但是没有写入主存,此时cpu2仍旧使用旧值进行计算,就会导致可见性问题。原子性原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。经典的转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B
2022-02-08 18:05:52 237
原创 Tomcat无法启动的问题
检查是否正确配置了环境变量,JAVA_HOME和CLASSPATH都要配置。在命令行输入java可以运行成功,不代表环境变量不需要配置。如何配置:Windows 10 配置Java 环境变量
2022-01-30 17:56:16 810
原创 RxJava:concat(连接)、 concatDelayError、 concatEager的使用
文章目录concat(串行连接数据)concatDelayErrorconcatEager(并行连接数据)concat(串行连接数据)concat,翻译为连接。这个方法的作用是将多个数据源发射的数据,按照顺序进行连接。数据的顺序,只与发射源的顺序相关,与数据源的发射时间无关。就是说,即使第二个发射源先完成了所有数据的发送,发射的数据也要排到第一个发射源的数据之后。测试简单连接: @Test public void testConcat(){ List<Obs
2022-01-28 15:42:57 2175
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人