- 博客(69)
- 资源 (24)
- 收藏
- 关注
原创 android系列-SystemServer创建服务
SystemServer会开启很多服务,这些服务的创建流程类似,以Installer为例子。
2024-01-08 22:59:52
772
原创 android系列-System.gc()和Runtime.getRuntime().gc()的区别
和 `` 都是用于请求垃圾回收的方法,但它们之间的主要区别在于调用方式和实现。
2024-01-08 15:44:42
578
原创 Java系列-Class.forName和ClassLoader.loadClass的区别
和是 Java 中两种加载类的方式,它们的主要区别在于加载类的时机和对异常的处理。
2024-01-08 15:25:05
591
原创 View系列-事件分发
继续调用DecorView的superDispatchTouchEvent。DecorView是PhoneWindow的一个对象。PhoneWindow是Activity的一个对象。DecorView继承自FrameLayout。
2024-01-05 17:43:56
400
原创 retrofit系列-ServiceMethod创建流程
SuspendForResponse` 和 `SuspendForBody` 是与 Kotlin 挂起函数一起使用的,使得在异步场景中更容易进行处理。在 Retrofit 中,`CallAdapted`、`SuspendForResponse` 和 `SuspendForBody` 主要涉及到 Retrofit 如何处理异步调用和响应处理。没找到,调用ServiceMethod.parseAnnotations创建ServiceMethod后,放入缓存,返回结果;
2024-01-04 18:29:48
857
原创 Android系列-LayoutInflater 几个 inflate方法的区别
(来自chatgpt的回答)提供了多个inflate方法,用于将 XML 布局文件解析为相应的视图对象。这些方法的主要区别在于参数的组合和用途。以下是常见的几个inflate。
2023-12-29 01:37:22
679
原创 Android系列-SurfaceView和View
开发者可以在后台线程中实现自定义的绘制逻辑,而不受主线程刷新频率的限制。这对于需要高性能绘制、复杂动画或游戏开发来说尤为重要。下面是一个简单的示例,演示了如何使用。
2023-12-28 18:21:54
705
原创 Java系列-HTTP和HTTPS 的实现原理
HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)是用于在网络上传输数据的两种协议,它们在实现原理和安全性上有一些关键的区别。
2023-12-28 18:17:28
823
原创 android系列-SurfaceView和View的区别
更适合一般的 UI 绘制和交互。选择使用哪个取决于应用的具体需求和性能要求。需要注意的是,在使用。是 Android 中两种不同的视图组件,它们在渲染和刷新机制上有一些区别。适用于需要更灵活控制绘制的场景,例如游戏开发、视频播放等,而。时要注意线程同步和生命周期管理等问题。(来自chatgpt的回答)
2023-12-28 18:09:43
624
原创 java系列-CountDownLatch
并没有像锁一样控制对临界区的访问,而是提供了一种不同的线程协作机制。它通常用于一组线程需要等待另一组线程完成操作的场景。方法会阻塞当前线程,直到计数器的值减到零。这个类主要用于一个或多个线程等待其他线程完成某些操作后再继续执行。不是一种锁,而是一种同步工具类,用于协调多个线程之间的操作。关键字那样实现了锁定机制,而是通过一个计数器来实现线程的等待和通知。维护了一个计数器,这个计数器的初始值由调用者在创建。方法,计数器的值减一;
2023-12-28 18:02:50
565
原创 java系列-Semaphore
信号量(Semaphore)不是严格意义上的锁,而是一种同步工具,用于控制同时访问某个特定资源的线程数量。信号量是由计数器和等待队列组成,它维护一个可用的许可证数量,线程可以通过获取许可证来执行临界区代码,执行完成后再释放许可证。二进制信号量只有两个状态,0 和 1。也称为互斥锁(Mutex),可以用于实现对临界区的互斥访问。类提供了对信号量的支持。
2023-12-28 18:00:28
364
原创 ANR系列-ANR是什么
ANR 是 "Application Not Responding"(应用无响应)的缩写。Android系统中,AMS和WMS会检测App的响应时间,如果App在特定的时间无法响应屏幕触摸或者键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。
2023-12-28 13:19:17
394
原创 apk瘦身方法
自己项目用过的开启代码混淆 minifyEnabled true 开启去除资源 shrinkResources true 使用矢量图 使用webp 手动删除无用资源、代码 精简abi库 abiFilters "armeabi-v7a" 精简资源 resConfigs "zh" //表示只使用中文 resConfigs "xhdpi" // 表示只是用xhdpi目录下的资源文件 动画使用lottie,不使用帧动画 减少代码:公共代码提取出来共用 避免滥用第三方库还没有用过的
2023-12-28 01:18:48
361
原创 矢量图优化包大小---vectorDrawables.useSupportLibrary
是一个在 Android Gradle 插件中的配置选项,用于指定是否在应用中使用支持库(Support Library)来兼容矢量图形(Vector Drawables)。在 Android 5.0(API级别21)及以上版本,Android 系统本身开始支持矢量图形,可以直接在应用中使用矢量图形资源文件(以。然而,在使用 Support Library 的情况下,你可以在更低版本的 Android 设备上使用矢量图形。`,则在构建应用时,矢量图形将被转换成支持库中的 `
2023-12-27 23:34:08
545
原创 okhttp系列-一些上限值
异步请求放入readyAsyncCalls后,遍历readyAsyncCalls取出任务去执行的时候,如果发现asyncCall的callsPerHost大于等于5,就不从readyAsyncCalls取出任务执行;否则callsPerHost加1。异步请求放入readyAsyncCalls后,遍历readyAsyncCalls取出任务去执行的时候,如果发现runningAsyncCalls的数量大于等于64,就不从readyAsyncCalls取出任务执行。
2023-12-22 22:59:42
1338
原创 Java系列-ConcurrentHashMap-addCount
如果有冲突,数组容量没有超过cpu核数,对数组进行扩容,新容量为老容量的2倍;初始化 counterCells,初始容量是2,将x放到要放入的位置;如果重新生成hash后,还是有冲突,将x增加到该桶的value;如果要放入的桶有冲突,重新生成hash,再看有没有冲突;如果没有冲突,放入该桶;
2023-12-17 00:03:13
80
原创 Java系列-ConcurrentHashMap源码
二进制的最高位是符号位,HASH_BITS的最高位是0,所以&运算结果的最高位一定是0;&运算的目的是为了保证hash值一定是正数,因为hash值为负数有特殊含义;初始完后sizeCtl被赋值为0.75*n (扩容阈值)为什么比HashMap多 & HASH_BITS。
2023-12-16 15:14:14
49
原创 Java系列-HashMap构造方法
将initialCapacity经过计算,换成大于等于initialCapacity的最小2的幂次方,然后赋值给threshold;在put的时候,threshold会被赋值给table的length,按照threshold来创建table。如果一开始cap是2的幂次方,如果不-1,最后的返回结果会是cap*2。只初始化了loadFactor。
2023-12-16 00:16:25
78
原创 Java系列-HashSet源码
实际调用的是HashMap的put方法,添加的值作为key。实际调用的是HashMap的containsKey方法。实际调用的是HashMap的remove方法。
2023-12-15 16:10:39
52
原创 java系列-LinkedHashMap怎么实现LRU
2.最近访问的节点移动到链表末尾 3.LruCache3.1.LruCache.put3.2.LruCache.evict3.3.LruCache.trimToSize循环移除,直到size小于maxSize,每次移除链表头元素3.4.LinkedHashIterator.remove
2023-12-13 13:00:13
196
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人