Android
文章平均质量分 88
揪克
公众号:mxszgg / Android dev-er / github:https://github.com/jokermonn
展开
-
友好 RxJava2.x 源码解析(一)基本订阅流程
系列文章: 友好 RxJava2.x 源码解析(一)基本订阅流程 友好 RxJava2.x 源码解析(二)线程切换 友好 RxJava2.x 源码解析(三)zip 源码分析本文掘金地址:友好 RxJava2.x 源码解析(一)基本订阅流程本文基于 RxJava 2.1.3前言示例代码订阅流程源码解析订阅流程 Observable#subscribe(Observer) ...原创 2017-11-26 10:30:49 · 1390 阅读 · 0 评论 -
友好 RxJava2.x 源码解析(二)线程切换
系列文章: 友好 RxJava2.x 源码解析(一)基本订阅流程 友好 RxJava2.x 源码解析(二)线程切换 友好 RxJava2.x 源码解析(三)zip 源码分析本文掘金地址:友好 RxJava2.x 源码解析(二)线程切换本文基于 RxJava 2.1.3前言示例代码源码解析 Observer#onSubscribe(Dispose)Observable#o...原创 2017-11-26 10:36:26 · 1391 阅读 · 1 评论 -
手摸手第二弹,可视化 RecyclerView 缓存机制
本文掘金地址:手摸手第二弹,可视化 RecyclerView 缓存机制前言一缓二缓四缓其他 谈谈 BindView(1)谈谈 BindView(2)前言开题前,笔者还是要说几句先,依旧和前文一样,文章内不涉及源码讲解,默认各位读者对源码有一定的了解,撰文的原因也如同前文,因为笔者认为当下在 ListView/RecyclerView 的源码讲解的文章中,大都是对着源码噼原创 2018-01-15 20:35:18 · 765 阅读 · 0 评论 -
可视化 ListView 缓存机制,手摸手带你打通任督二脉
本文掘金地址:https://juejin.im/post/5a52b0e15188257345015ad3简介痛点缓存机制解析 初始化触发第一个缓存屏幕内容数量最大化触发 Item2 的显示继续触发总结项目地址:ListViewVisualization简介本文不涉及 ListView 缓存机制的源码探析,关于 ListView 的缓存机制郭霖前辈的《Andr原创 2018-01-07 20:16:24 · 741 阅读 · 0 评论 -
谈谈 View 绘制流程
注:本文使用 sdk 23 作为源码参考。前言ViewRootImpl#performTraversals() ViewRootImpl#performMeasure()ViewRootImpl#performLayout()ViewRootImpl#performDraw()some tips onDraw()dispatchDraw()前言关于 View 的绘制流原创 2019-06-09 23:02:31 · 717 阅读 · 0 评论 -
如何打造一个 Android 编译时注解框架
前言预览permissions4m-annotationpermissions4m-processor AnnotationProcessorProxyInfoAnnotationProcessor 编码ProxyInfo 编码permissions4m-api前言近期笔者开源了一个 Android 编译时注解框架库——Permissions4M,一款处理 Android原创 2017-08-02 19:37:35 · 10482 阅读 · 7 评论 -
友好 RxJava2.x 源码解析(三)zip 源码分析
系列文章: 友好 RxJava2.x 源码解析(一)基本订阅流程 友好 RxJava2.x 源码解析(二)线程切换 友好 RxJava2.x 源码解析(三)zip 源码分析本文基于 RxJava 2.1.9前言示例代码源码解析可视化后记前言距离前两篇文章已经过去三个月之久了,终于补上第三篇了。第三篇预期就是针对某一个操作符的源码进行解析,选择了 Observabl...原创 2018-03-31 23:43:22 · 1007 阅读 · 0 评论 -
聊一聊 EventBus 源码和设计之禅
前言register() 获取当前注册对象所有订阅方法信息subscribe()post() postSingleEvent()unregister()threadMode invokeSubscriber()Poster#enqueue()sticky优化操作 eventInheritanceAPT设计技巧 反射方法FindStateAsyncPoster、B...原创 2018-04-15 21:40:13 · 918 阅读 · 0 评论 -
写给 Android 开发者的 Gradle 系列(一)基本姿势
本文基于 Android Gradle plugin 3.0.1Gradle 介绍如何学习 GradleGradle taskGradle 构建周期 hook Gradle 构建过程后文 附录 Gradle 介绍 笔者认为能够戳进这篇文章的读者十之八九也是知道 Gradle 可以用来干什么,所以没必要介绍什么了,毕竟说一堆术语搞得大家都不懂很难堪(手动滑稽)。简单来说...原创 2018-05-11 09:24:33 · 6409 阅读 · 2 评论 -
写给 Android 开发者的 Gradle 系列(三)撰写 plugin
本文基于 Android Gradle plugin 3.0.1 前言 在前文中笔者阐述道 task 就相当于函数,那么这篇文章所要介绍的 plugin 就相当于函数库了。毕竟在 build.gradle 文件中撰写大量的 task 是肯定不好维护的,所以可以将 tasks 做成 plugin 然后直接 apply 就好了。 就像在 app/build.gradle 中 apply...原创 2018-05-20 17:18:30 · 868 阅读 · 0 评论 -
写给 Android 开发者的 Gradle 系列(二)撰写 task
本文基于 Android Gradle plugin 3.0.1前言task 撰写 task 声明 扩展task 内容格式task 依赖关系task 实战 install && launch apkhook assets后记前言在 app/build.gradle 中添加如下依赖: compileOnly ‘com.android.tool...原创 2018-05-14 22:15:26 · 2244 阅读 · 0 评论 -
写给 Android 开发者的 Gradle 系列(四)plugin 实战包体积瘦身
本文由玉刚说写作平台提供写作赞助,版权归玉刚说微信公众号所有 原作者:joker 版权声明:未经玉刚说许可,不得以任何形式转载本文插件基于 Android Gradle Plugin 3.0.1 版本 前言 日常开发中,为了避免运行时 R 文件反射失败,一般在混淆的时候都会将 R 文件 keep 住,但是因此也会导致包体积有一定的上升,那么有没有减少 R 文...原创 2018-05-28 08:20:06 · 1259 阅读 · 0 评论 -
开源库小技巧+1,在 ContentProvider 中初始化
情景模拟调用时机优缺点后记情景模拟最近小明开源了一个 Android 三方库,接入流程很简单,开发者们只需要在应用的 Application 的 onCreate() 方法中去初始化它,然后就可以调用相应的库 API 了——public class App extends Application {  &原创 2018-08-28 20:15:08 · 1697 阅读 · 1 评论 -
利用 Transform 解决模块化开发服务调用问题
如果你对本文感兴趣,也许你对我的公众号也会有兴趣,可扫下方二维码或搜索公众微信号:mxszgg前言模块化开发的服务调用概念解决方案Transform APIjavassist实操前言如果读者对模块化开发的服务调用具有一定的认识可以跳过下面一小节。模块化开发中的服务调用概念模块化开发现在对于 Android 开发者来说应该是一个耳熟能详的名词了,现在应该有许多应用...原创 2018-10-05 17:00:35 · 1070 阅读 · 0 评论 -
一劳永逸修改 Android Studio .gitignore 默认模板
Android Studio 的项目中默认包含了 .gitignore 文件,但是其内容不是特别的友好,例如其 app 级别的 .gitignore 文件内容如下:*.iml.gradle/local.properties/.idea/workspace.xml/.idea/libraries.DS_Store/build/captures.externalNativeBuild但原创 2017-11-10 12:42:46 · 8598 阅读 · 1 评论 -
AsyncTask —— Android 原生异步通信简析
AsyncTask 与 RxJavaHello World源码简析 构造函数 mWorkermFutureexecuteAsyncTask 与 RxJava在这个 RxJava 已经遍布各个 app 的时代,作为原生的 AsyncTask 可能已经倍感压力了吧。但是无论如何 RxJava 如何流行,AsyncTask 都是我们需要掌握的,相比于 RxJava 我们需要知道 AsyncT原创 2017-09-01 10:28:48 · 773 阅读 · 0 评论 -
从源码角度简析 Android 消息机制
MessageQueue 源码解析 enqueueMessage()next()Looper 源码解析 prepare()loop()quit()、quitSafely()Handler 源码解析 构造方法send() 系列post() 系列dispatchMessage()流程一览Handler 最佳写法补充MessageQueue 源码解析MessageQueue原创 2017-03-16 17:52:24 · 1161 阅读 · 4 评论 -
Android Drawable Importer的使用
项目地址:https://github.com/winterDroid/android-drawable-importer-intellij-plugin原创 2016-06-19 19:40:14 · 11272 阅读 · 4 评论 -
CoordinatorLayout 的滑动处理
原文地址:https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout#troubleshooting-coordinated-layouts预览CoordinatorLayout 扩展了许多能实现 Google Material Design scrolling effects(滚动技巧) 的效果,目前,这个翻译 2016-08-31 12:18:44 · 8434 阅读 · 0 评论 -
详解 Dagger2 的 @Scope 和 @Subcomponent
个人觉得网上关于 dagger2 文章中关于 @Scope 和 @Subcomponent 解释的并不是很详细,也可能是我个人能力有限不能够理解,所以写下这篇文章,希望能够帮助后人更方便的入门。@Scope 是什么@Scpoe 的使用@Subcomponent 是什么@Subcomponent 的使用@Subcomponent 和 @Component 的实际使用场景定义@Scope 是原创 2016-11-26 20:35:22 · 2670 阅读 · 1 评论 -
从源码角度剖析 setContentView() 背后的机制
注:本文基于 AS 2.3,示例中的 Activity 继承自 AppcompatActivity。示例源码解析 AppCompatDelegateImplV7PhoneWindow流程一览示例日常开发中,我们在 Activity 中基本上不可避免的都会使用到 setContentView() 这行代码,而理解它背后的机制能够让我们对日常的优化有更深地理解,网上也有些许文章介绍该机制,但原创 2017-03-28 19:09:04 · 2641 阅读 · 0 评论 -
从实例和源码角度理解 postInvalidate() 和 invalidate() 的区别与联系
区别与联系使用情景源码解析区别与联系postInvalidate() 方法在非 UI 线程中调用,通知 UI 线程重绘。 invalidate() 方法在 UI 线程中调用,重绘当前 UI。使用情景近期在对 View 温故而知新的学习过程中,看到一个 postInvalidate() 方法,让我很好奇,这个方法与 invalidate() 方法有什么区别和联系呢?让我们假设一个场景,当前有一原创 2017-03-24 23:18:49 · 6072 阅读 · 15 评论 -
Layout Inspector —— Android Studio 替代 Hierarchy Viewer 的新方案
最近在研究 View 窗口机制的时候想要查看一下应用的视图结构,第一印象当然是布局查看神器 —— Hierarchy Viewer 啦!然后走进 /sdk/tools/ 目录下发现曾经的 Hierarchyviewer.bat 不见了 ——而原来的是这样的 ——我们可以看到,还是少了相当多的东西的(仅 .bat 文件),那我们就试试用 DDMS 吧,打开 DDMS,然后 Window -> Open原创 2017-03-27 13:14:37 · 31814 阅读 · 7 评论 -
Android Paint 浅坑—— Style 模式
业务场景Style 坑析业务场景近期遇到一个需求,绘制一个如下的自定义 View ——最初的想法是先绘制一个中心的灰圆,再绘制外圈的黄色圆弧,再绘制蓝绿色圆弧(此处仅为了讨论坑,不考虑最优绘制方法),于是写下如下代码:@Overrideprotected void onDraw(Canvas canvas) { // 黄弧最外半径 mMR = w * 4 / 21; /原创 2017-06-04 11:49:07 · 5616 阅读 · 3 评论 -
强制清除 gradle 依赖缓存
如果你正在开发一个库,并将它传上 jcenter 或者 jitpack,由于没上线,于是你一直上传 1.0 的版本,不停地覆盖远程仓库上的版本,但是你遗憾地发现本地的 gradle 出了问题,那么是由于 gradle 在下载依赖的同时自动将其缓存了一份在本地,所以等你第二次开启一个项目并依赖同一个库的同一个版本的时候,gradle 实际上只是拿了本地的缓存,但是这份小聪明,对于我前面所说的情况下的开原创 2017-07-30 15:01:15 · 50098 阅读 · 5 评论 -
手摸手教你如何把项目提交到 jcenter
前言jcenter 作为 Android 开发者来说,应该是首选,因为 Android Studio 默认即是以 jcenter 为远程库,本文使用 bintray-release 插件完成项目的上传,相比于网上流传的 gradle-bintray-plugin, bintray-release 所需要编写的 gradle 代码量极少,所以即使你是一个与我一样对 gradle 不熟悉的开发人员,那也原创 2017-08-01 21:03:16 · 1114 阅读 · 0 评论 -
Android 注解指南
前言一览示例详解前言日常开发中,注解能够帮助我们写出更好更优秀的代码,为了更好地支持 Android 开发,在已有的 android.annotation 基础上,Google 开发了 android.support.annotation 扩展包,共计50个注解,帮助开发者们写出更优秀的程序。官网链接:https://developer.android.google.cn/reference/原创 2017-04-23 18:01:20 · 12655 阅读 · 2 评论 -
国产 Android 权限申请最佳适配方案 —— permissions4m
* 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 - 前言 - 情景再现 - permissions4m 简介 - 后记前言permissions4m 最初的设计是仅仅做成一个编译器注解框架,在1.0.0版本时,它纯粹地实现了原生 Android 请求流程,关于它的设计思路可以查看这篇如何打造一个 Android 编译时注解框架。但是当投入笔者自己项目中使用的时候,笔者原创 2017-08-26 13:40:01 · 9027 阅读 · 30 评论 -
MainDex 优化记
tips: 本文基于 AGP 3.0.1 源码分析MainDex 打入规则分析MainDex 瘦身容易忽略的地方其它优化MainDex 打入规则分析“maindex method 超过 65536 了,咋被打爆了呢?”在过去很长一段时间内我们的应用 maindex 会被打爆,于是大佬们使用了DexKnifePlugin 来解决问题,但是后来 AGP 上了 3.0.1 以及其他问题的出现,DexKnifePlugin 已经不是能够很良好地适用于我们的 app 中了,于是巴神(公.原创 2019-02-07 19:23:07 · 1775 阅读 · 0 评论