![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android疑难杂症
文章平均质量分 91
minminaya
简书博客文章迁移中https://www.jianshu.com/u/43a04ef9d4c6
展开
-
2018年Android的保活方案效果统计
一、常见保活方案1、监听广播:监听全局的静态广播,比如时间更新的广播、开机广播、解锁屏、网络状态、解锁加锁亮屏暗屏(3.1版本),高版本需要应用开机后运行一次才能监听这些系统广播,目前此方案失效。可以更换思路,做APP启动后的保活(监听广播启动保活的前台服务)2、定时器、JobScheduler:假如应用被系统杀死,那么定时器则失效,此方案失效。JobService在5.0,5.1,6.0作用很大,7.0时候有一定影响(可以在电源管理中给APP授权)3、双进程(NDK方式Fork子进程)、原创 2022-03-23 09:53:35 · 367 阅读 · 0 评论 -
5 分钟学废 Compose MutatorMutex
结论用于 cancel 之前的协程 Job,并且执行新的协程体的工具类。背景(说垃圾话环节)看 Compose 源码的时候发现跟动画有关、滚动有关的操作基本上都会出现一个叫做 MutatorMutex 的类,一开始还以为是 Kotlin 标准库 Mutex 的什么黑科技。仔细看包名后才发现原来是 Compose 全家桶的黑魔法。androidx.compose.foundation.MutatorMutex当机立断的我如往常一样点进去看源码注释Mutual exclusion for原创 2022-03-23 09:52:42 · 340 阅读 · 0 评论 -
轻松玩转 Android 复杂列表埋点曝光(也许是一行噢)
一个好的产品离不开数据分析,在手机 APP 中,数据分析极致化需要细致到某个时刻列表曝光的了哪几个 Item。2022 年了,基本上目前 Android 上可以滑动的复杂列表都是 RecyclerView 或者其扩展,这里分享一个封装的思路。一、基本思路什么是列表曝光简单的理解就是用户在肉眼可感知范围内真正看到了数据就算曝光,包括数据刷新了如果非要细化细节:1、列表数据变化时,比如上滑下滑2、页面从隐藏到显示,比如切换页面、前后台切换一些方案的对比各种方案核心都差不多,最关键原创 2022-03-23 09:49:58 · 1349 阅读 · 0 评论 -
更优雅的在 Kotlin 中封装 Retrofit (去掉 Catch)
如果可以我想改名成《看完不会在 Kotlin 中封装 Retrofit就砍我》,嘿嘿…Retrofit 是一个设计相当精良的框架,特别是其可扩展性上。官方提供的协程的使用方式和 API 实现在一些情况下不大优雅,本文主要是 bb 对其的相关扩展,让项目代码变得更傻瓜式和对 Retrofit 协程方式编写代码方式更加优雅。基于下述思路封装的网络框架已经在线上持续稳定使用 1 年多了,适合各种牛(qi)逼(pa)的场景,本篇各个环节会涉及到奇奇怪怪的想法…Retrofit 对协程的支持Retrofi原创 2022-03-23 09:44:58 · 1548 阅读 · 0 评论 -
Android通用圆角布局(兼容Android P)
Android通用圆角布局(兼容Android P)Android通用圆角布局,可以解决Android P版本xfermode方案裁剪黑边问题和xfermode在列表view中使用滑动时EGL内存泄露问题其诞生有3个原因1、之前使用的XferMode裁剪方案在P版本失效2、xfermode圆角裁剪方案在RecyclerView中使用,滑动时会出现EGL内存泄露问题(系统api未做好内存回收),使用GeneralRound,可以解决L版本上的机器3、希望可以快速将一个View装饰包装变成支持裁原创 2022-03-23 09:43:54 · 1315 阅读 · 0 评论 -
(1)LruCache原理分析
简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6浅析LruCache原理Android用LruCache(Least recently use Cache 意思就是最近使用次数最少的那个对象)来取代原来强引用和软引用实现内存缓存,因为据说自2.3以后Android将更频繁的调用GC,导致软引用缓存的数据极易被释放。LruCache使用一...原创 2018-04-09 11:07:53 · 286 阅读 · 0 评论 -
(2)图片加载原理
Android系统加载图片是先要把图片转换为Bitmap对象然后再传到ImageView里头显示的。现在难点是: - 不同的图片有不同的大小,造成Bitmap对象size不一样 - 不同的机器内存不一致,内存小的机器很容易因为单个或者多个Bitmap导致OOM为了防止OOM适当的给图片进行压缩适当的缓存方案(ViewHolder,LruCache,DiskLruCache等)...原创 2018-04-09 11:09:50 · 353 阅读 · 0 评论