
Android
文章平均质量分 74
catzifeng
㊙️㊙️㊙️㊙️㊙️
展开
-
Android Kotlin 使用协程取代回调函数(suspendCoroutine 的用法)
文章目录一、简述二、示例2.1 普通写法2.2 协程写法三、带有成功和失败的回调3.1 普通写法3.2 协程写法3.3 使用协程上下文处理异常一、简述如果说大家对于协程已经有些熟悉了,但是手拿一把未开封的 绝世好剑,却无法发挥真正的威力!或者大家不是很熟悉协程,还不清楚协程所带来的好处是啥?这篇文章会为大家带来 通窍级别 的体验。二、示例2.1 普通写法以获取一个 View 的宽高为例。通常我们获取一个 View 的宽高,都是这么做的:view.post { val height = vi原创 2020-10-24 18:39:11 · 9317 阅读 · 2 评论 -
Android singleInstance栈内打开Activity的方法
我们都知道,被标记了 singleInstance 的 Activity 会开启一个新的 Activity栈,并且该栈只允许这一个实例存在!在应对某些需求的时候,这样的特性可能会带来阻碍性的麻烦,所以我们原创 2020-10-12 12:27:32 · 583 阅读 · 0 评论 -
Kotlin协程分析(二)——suspendCoroutineUninterceptedOrReturn
文章目录一、简介二、分析三、suspendCoroutineUninterceptedOrReturn 怎么做到的?四、战略作用(重点)!!!1、两个`resume()` 为啥没有走两次回调2、为啥里边的**continuation**的`resume()` 会在返回值里呢?3、返回值为什么是 COROUTINE_SUSPENDED五、简单的用例(必读)六、小结一、简介这个函数的作用 至关重要。我们先回想之前创建 协程(Continuation) 的过程,是通过一个 suspend<R>()原创 2020-10-04 00:08:50 · 2418 阅读 · 0 评论 -
Android自定义View——RecyclerView 滚动条
Android 自定义View,适合 RecyclerView 的滚动条原创 2020-07-09 23:31:15 · 3507 阅读 · 11 评论 -
Android UVCCamera 拔出USB摄像头闪退问题
这是 native 的错误,因为手机连接摄像头,地狱级的调试体验,找了很久才找出这个问题,然后根据issue修改了c代码,重新编译了so库。使用下面的so库即可。看链接:so库原创 2020-07-04 11:18:10 · 2429 阅读 · 31 评论 -
Android秀翻天的操作——使用协程进行网络请求
文章目录一、前言一、前言古往今来,时代顺应潮流,潮流引领时代。Android 网络界发展至今已经出现过无数风流框架,看先祖 HttpURLConnection 老矣,HttpClient 也早已隐退,而那 android-async-http 力不从心却也封刀,但江湖却还流传着它的故事,有那谷歌亲儿子 volley 独占中州,笑迎四面八方来客,OkHttp 不慌不急,稳占其余大洲,更有它那亲爹 Retrofit 默默支撑着它,使得各位风骚侠客能够有安稳的栖身之地。是年三月(瞎编的),异步界 RxJa原创 2020-05-30 16:21:57 · 744 阅读 · 0 评论 -
五分钟速读RxJava源码
文章目录一、前言二、代码展示三、名词概念四、源码分析1、直接看第一句代码 `Observable.just("hello")`:2、最后一句代码`subscribe()`五、总结一、前言RxJava 是一个功能强大的三方库,其源码看起来也十分的 “复杂”,为什么看起来会 “复杂”呢?那是因为其 Observable 有 N 多个的实现,使人眼花缭乱。这样往往使得想深究其源码的人,打开 Android Studio 后,点击 更新,十分钟后,点击 Observable源码,五分钟后,点击右上角❌。但其原创 2020-05-23 16:34:58 · 328 阅读 · 2 评论 -
Glide源码分析(三)
文章目录.into(*)1、Target2、Request3、track()3.1 生命周期3.2 requestTracker.runRequest(Request).into(*)这个方法非常的复杂,得反复看好几遍源码。 —— 鲁迅以 .into(ImageView) 为例,我们看看这个方法究竟做了哪些事情: public ViewTarget<ImageView, T...原创 2020-02-04 17:46:10 · 281 阅读 · 0 评论 -
Glide源码分析(二)
文章目录.load()总结.load()在调用Glide.with(*)之后(传入的参数除applicationContext之外),会返回一个RequestManager,这个东西会储存在SupportRequestManagerFragment中,所以也是个单例。接下来就是调用 .load(*),该方法同样有很多重载,我们以 *.load(String)*为例: @Override ...原创 2020-02-03 12:26:04 · 126 阅读 · 0 评论 -
Glide源码分析(一)
Glide源码分析(一)1、Glide入口Glide.with()和Glide.get()Glide.with()有6个重载(弃用一个剩余5个常用的),分别是:Glide.with(Context)Glide.with(View)Glide.with(Activity)Glide.with(Fragment)Glide.with(FragmentActivity)先看看第一个...原创 2020-01-15 23:41:39 · 286 阅读 · 0 评论 -
LiveData setValue和postValue的区别及详解
LiveData是谷歌官方主推JetPack中的组件之一。如果没有学习的同学可翻阅google官方资料平时我们使用LiveData的时候,需要更新数据的时候,LiveData提供了两种更新数据的方式:setValue(T value)postValue(T value)那么这两种方式有什么区别呢?结论setValue()只能在主线程中调用,postValue()可以在任何线程...原创 2020-01-10 23:36:22 · 27946 阅读 · 3 评论 -
DexClassLoader解析微信朋友圈数据库
DexClassLoader解析微信朋友圈数据库前提工具DexClassLoader扩展前提当我们拿到微信的朋友圈数据库的时候,我们能够直接打开,这个数据库并没有像EnMicroMsg数据库一样采用了加密方式。但是当我们想要获取其内容的时候,发现content和attrBuf加密了,这是个Blob型的字段,虽然我们可以直接用**String(contentBlob)**的方式拿到字符串,但是显...原创 2019-06-28 15:20:52 · 2025 阅读 · 5 评论 -
ViewPager里面Fragment滑动卡顿
笔者最近在写一个ViewPager+Fragment的项目,发现一个问题:如果Fragment添加背景图的时候,滑动ViewPager会很卡。如下图GPU呈现图所示:如果把背景图去掉,滑动又变得流畅。笔者再三查阅资料,发现了一个天坑!!!引用背景图时,图片要放在mipmap包中之后滑动ViewPager就正常了...原创 2018-09-21 22:29:35 · 1615 阅读 · 1 评论 -
Android自定义View——下雨效果
Android自定义View-下雨效果先来看一下效果: 根据效果图,我们来分析一下需求。1、雨滴由一条线段构成2、一个RainWidget包含许多雨滴3、雨滴的长度、宽度、速度、透明度是随机的4、雨滴向下滴落,当超出屏幕高度,将重新随机在屏幕上边缘生成5、一打开应用,雨滴就随机分布在屏幕,而不是出生在屏幕最上方接下来,我们就一步一步分析该View是如何实现的...原创 2018-09-09 16:10:25 · 2192 阅读 · 5 评论