自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

minminaya

我们的征途是星辰大海。

  • 博客(31)
  • 收藏
  • 关注

原创 轻松玩转 Android 复杂列表埋点曝光(也许是一行噢)

一个好的产品离不开数据分析,在手机 APP 中,数据分析极致化需要细致到某个时刻列表曝光的了哪几个 Item。2022 年了,基本上目前 Android 上可以滑动的复杂列表都是 RecyclerView 或者其扩展,这里分享一个封装的思路。一、基本思路什么是列表曝光简单的理解就是用户在肉眼可感知范围内真正看到了数据就算曝光,包括数据刷新了如果非要细化细节:1、列表数据变化时,比如上滑下滑2、页面从隐藏到显示,比如切换页面、前后台切换一些方案的对比各种方案核心都差不多,最关键

2022-03-23 09:49:58 1258

原创 更优雅的在 Kotlin 中封装 Retrofit (去掉 Catch)

如果可以我想改名成《看完不会在 Kotlin 中封装 Retrofit就砍我》,嘿嘿…Retrofit 是一个设计相当精良的框架,特别是其可扩展性上。官方提供的协程的使用方式和 API 实现在一些情况下不大优雅,本文主要是 bb 对其的相关扩展,让项目代码变得更傻瓜式和对 Retrofit 协程方式编写代码方式更加优雅。基于下述思路封装的网络框架已经在线上持续稳定使用 1 年多了,适合各种牛(qi)逼(pa)的场景,本篇各个环节会涉及到奇奇怪怪的想法…Retrofit 对协程的支持Retrofi

2022-03-23 09:44:58 1451

原创 CropView从入门到放弃

CropView从入门到放弃本篇我会带你去从零设计一款裁剪旋转的View你需要准备的裁剪的View最关键的是裁剪框的绘制和手势的调整,另外还有最核心的裁剪功能就是调用方法createBitmap去裁剪得到目标图片。//图片裁剪的核心功能Bitmap.createBitmap(originalBitmap,//原图 cropX,//图片裁剪横坐标开始位置 cropY,//图片裁剪纵坐标开始位置 c

2022-03-23 09:41:18 378

原创 Android性能优化之布局优化

在布局文件中的背景遮挡的情况下,避免绘制DecorView的背景(有别于Activity的背景),减少过度绘制。android:windowBackground属性就是DecorView的背景将Activity的背景放到DecorView的背景中(虽然性能优化不大,但是能把平滑的感知提供给用户)离屏缓冲开启硬件层(API 14后默认开启)view.setLayerTy...

2018-04-14 23:29:42 184

原创 RecyclerView从入门到深入

简书博客文章迁移中https://www.jianshu.com/u/43a04ef9d4c6目录:一 、RecyclerView简介二 、RecyclerView为什么会出现三 、基本使用方法四 、高级用法ScrollbarsItem间分割线Item显示方式自定义LayoutManagerRecyclerView的点击事件高级效果 波纹点击添加 ...

2018-04-09 11:11:04 285

原创 EventBus源码分析

简书博客文章迁移中https://www.jianshu.com/u/43a04ef9d4c6好久没写博文了,这几个月复习了很多东西,新年在老家闲的慌啊,我这么爱学习的人只能学习了哈啊哈哈哈哈哈哈(滑稽脸)。顺便总结总结一些容易忘的东西。EventBus的使用相信大家都使的贼溜了。实在不行看文档嘛。本文只要是分析下EventBus的源码执行过程,分析分析设计的思路,这样对使用和深入学习...

2018-04-08 17:15:40 114

原创 如何系统学习 Android 插件 ASM

可能大家刚开始学习 Transform 的时候会比较迷茫,看到漫天的博客上来就是一个 Gradle 插件,各种编译时黑科技修改源码。如果目的只是模仿大佬们的教程,稍微改改 Transform 实现可能还好,但是可能有些定制性的功能,可能就会抠破头了。我之前也有这种情况,后面我思考了怎么解决这个问题。其实我认为,上来就搞 Transform 相对于整个插件开发的路子来说,太跨越性了,根本原因还是地基没打好就建摩天大楼了。本篇我会分享下 Transform 相关的从入门到入门历程。一步一步踏踏实实的。大致路线

2022-04-13 13:09:29 2099

原创 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 357

原创 5 分钟学废 Compose MutatorMutex

结论用于 cancel 之前的协程 Job,并且执行新的协程体的工具类。背景(说垃圾话环节)看 Compose 源码的时候发现跟动画有关、滚动有关的操作基本上都会出现一个叫做 MutatorMutex 的类,一开始还以为是 Kotlin 标准库 Mutex 的什么黑科技。仔细看包名后才发现原来是 Compose 全家桶的黑魔法。androidx.compose.foundation.MutatorMutex当机立断的我如往常一样点进去看源码注释Mutual exclusion for

2022-03-23 09:52:42 323

原创 Kotlin “谈” “弹” “潭”

Kotlin “谈” “弹” “潭”本篇针对使用Java的Android开发者,快速入手Kotlin,期间可能啰啰嗦嗦稀里糊涂缓缓乎乎穿插一些我中过的坑。这里不讲Kotlin异步并发(协程)、不讲Kotlin反射,如果你是来看它们的。那我现在也木有。目录一、为什么要学习kotlin二、基本使用1、Java写法和Kotlin的写法对比2、基本类型Kotlin中数字类型运算符号布尔值数组3、基本表达式表达式流程控制when使你力腕狂澜使用表达式比语句更加安全for循环的奥

2022-03-23 09:51:44 215

原创 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 1241

原创 如何优雅的实现撤销和回退功能

如何优雅的实现撤销和回退功能本篇要讲的是怎么样快速并且稳定以及优雅的实现redo undo功能的逻辑,相信大家都会想到命令模式的可以实现这个功能,但是如果你不想写那么多代码,偷个懒的话,那请往下瞧瞧!好了各位老司机,快肥来,看栗子如下,需求是普通的插入数据,然后插入之后的数据可以做到undo(左移),redo(右移),全部删除的功能。其实如果你们应用里面要是有图片编辑的撤销和回退场景的话,那么这个图的功能表现你可能很熟悉。撤销删除环形管理类撤销重做的功能用途很广泛,比如平时用到的Ctrl+

2022-03-23 09:42:32 4526

原创 Android性能优化之线程优化

不能通过非UI线程对View进行操作。因为Android的UI不是安全的,如果View能被不同的线程所访问或修改,那么就可能在程序的执行期间,产生不可预期的行为或者并发错误。使用线程时,避免在循坏中使用同步,因为获取和释放锁的操作代价很大。会引起CPU资源的损耗。处理多线程以及线程间通信时,使用HandlerThread来操作,它内部包装了Looper,记得不用的时候退出/释放资源哦。...

2018-04-19 23:38:37 275

原创 线程池与Android的日日夜夜

线程池与Android的日日夜夜假如你Java中研究到了线程池的话,一般来说,你已经对线程的原理颇有研究了,或者说,你意识到了线程的某些瓶颈或者缺点。你说,要有光,所以,天降线程池。正儿八经的说,如果你为每一个请求创建一个新的线程,这在性能上影响是巨大的,因为线程对象的创建销毁需要Java虚拟机频繁的GC,假如说,一个请求所用的时间比创建销毁线程对象时间还短的话,那么时间将会大程度浪费...

2018-04-16 18:07:39 25072

原创 Android性能优化之内存优化

需要知道的一些Android内存管理是paging分页和memory-mapping内存映射技术(通过映射将二级存储的相关文件关联),没有使用虚拟内存技术,可用内存数量完全取决于RAM。ART相对于Dalvik,减少了垃圾回收的步骤,为位图对象Bitmap添加了一个特殊的内存块。ART虚拟机的AOT提前编译在Android N时候添加了JIT及时编译,用于在应用程序执行期间,它仅仅是用于...

2018-04-16 15:37:27 208

原创 Android依赖注入框架Dagger2学习笔记

简书博客迁移https://www.jianshu.com/u/43a04ef9d4c6依赖注入 面向对象编程的一种设计模式,目的是为了降低程序中类与类之间的依赖引起的耦合。在Java中,依赖注入有通过接口注入通过set方法注入通过构造方法注入通过注解注入Dagger2官网为什么要用Dagger让你不需要初始化对象。也就是说任何...

2018-04-10 18:29:31 401

原创 用属性动画实现一个确认按钮

简书博客迁移https://www.jianshu.com/u/43a04ef9d4c6不多BB,先上图 此按钮由一个圆一个勾组成,准确的说应该是一个圆2条线组成还有动画,这里用的是属性动画,分为4部分,圆圈,线(2条),还有整体的放大缩小开工这里不解释初始化画笔,各种数据过程,关键点在onDraw方法里protected void onDraw(Canva...

2018-04-10 18:27:03 168

原创 Service的两种启动方式

简书博客迁移https://www.jianshu.com/u/43a04ef9d4c6目录:Service定义官方对服务的解释 通俗的解释服务能做什么服务的生命周期通常服务有两种形式创建一个最简单的服务服务的回调函数详解一 启动型startService 二 绑定Service创建一个前台服务IntentService(异步的,会自动停...

2018-04-10 18:26:04 24504

原创 CardView

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6目录:CardView简介CardView基本属性(xml文件中)某些属性使用效果CardView使用方法高级效果 波纹点击(像点击Button那样)注意 对低版本的兼容处理CardView简介CardView是API21(Android5.0)发布的卡片式控件。简单...

2018-04-09 11:12:46 343

原创 (2)图片加载原理

Android系统加载图片是先要把图片转换为Bitmap对象然后再传到ImageView里头显示的。现在难点是: - 不同的图片有不同的大小,造成Bitmap对象size不一样 - 不同的机器内存不一致,内存小的机器很容易因为单个或者多个Bitmap导致OOM为了防止OOM适当的给图片进行压缩适当的缓存方案(ViewHolder,LruCache,DiskLruCache等)...

2018-04-09 11:09:50 351

转载 8张图理解JAVA

简书博客文章迁移中https://www.jianshu.com/u/43a04ef9d4c6在原文基础上形象解释。。。。。 下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。1、字符串不变性堆中常量池决定(毕竟final类型,JVM还特别优化了String)2、equ...

2018-04-09 11:08:48 345 1

原创 (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 280

原创 Android中Activity的View组成

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6源码基于API25最简单的Activity这里以继承自Activity为准,不是AppCompatActivity,AppCompatActivity是有一点不同的。public class Main2Activity extends Activity { @Overrid...

2018-04-08 20:54:17 987

原创 Android中View事件分发机制

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6View事件分发流程图思维导图保存下来看清楚点,end

2018-04-08 20:53:59 139

原创 Android的Scroller源代码分析

首先先来实现一个Scroller滑动1.新建一个View,给它画上一个红色的矩形,左定点坐标是(100,100),并且在构造函数中初始化Scrollerpublic class MyView extends View { private Scroller scroller; private Paint paint = new Paint(); public...

2018-04-08 20:53:23 168

原创 Android的View的工作流程

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6打开源码,对着流程图入口:1.DecorView被加载到Window中DecorView会被加载到一个ViewRoot中,然后装载到PhoneView中入口:2.ViewRoomImpl的performTraveals方法注:画漏了performTraveals()的大框...

2018-04-08 20:53:02 332

原创 Android的消息机制源码分析(4)--Handler

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6Android的消息机制源码分析(1)- ThreadLocal Android的消息机制源码分析(2)- 消息队列(MessageQueue) Android的消息机制源码分析(3)- Looper Android的消息机制源码分析(4)- Handler Android的消息机制的总体流...

2018-04-08 20:52:28 137

原创 Android的消息机制源码分析(3)- Looper

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6Android的消息机制源码分析(1)- ThreadLocal Android的消息机制源码分析(2)- 消息队列(MessageQueue) Android的消息机制源码分析(3)- Looper Android的消息机制源码分析(4)- Handler Android的消息机制的总体流...

2018-04-08 20:52:00 105

原创 Android的消息机制源码分析(2)- 消息队列(MessageQueue)

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6Android的消息机制源码分析(1)- ThreadLocal Android的消息机制源码分析(2)- 消息队列(MessageQueue) Android的消息机制源码分析(3)- Looper Android的消息机制源码分析(4)- Handler Android的消息机制的总体流...

2018-04-08 20:51:35 121

原创 Android的消息机制源码分析(1)- ThreadLocal

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6Android的消息机制源码分析(1)- ThreadLocal Android的消息机制源码分析(2)- 消息队列(MessageQueue) Android的消息机制源码分析(3)- Looper Android的消息机制源码分析(4)- Handler Android的消息机制的总体流...

2018-04-08 20:50:48 133

原创 Android的消息机制的总体流程

简书博客文章迁移https://www.jianshu.com/u/43a04ef9d4c6Android的消息机制源码分析(1)- ThreadLocal Android的消息机制源码分析(2)- 消息队列(MessageQueue) Android的消息机制源码分析(3)- Looper Android的消息机制源码分析(4)- Handler Android的消息机制的总体流...

2018-04-08 20:50:29 132

空空如也

空空如也

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

TA关注的人

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