
Android
文章平均质量分 78
陈旭金-小金子
在职
展开
-
如何快速的将下载的一组 mipmap 图片转化成 drawable
干就完了当我们使用蓝湖 UI 设计的时候, 我发现下载的 png 的一组图都是 mipmap 命名的.下载之后. 我需要对五个目录重命名, 并且将内部的文件统一重命名这个十分浪费我的时间, 所以博主必须解决!!!项目 mmtdAndroid 就是解决这个问题的. 内部帮助你重命名了目录和文件. 使用很方便.下图就是我下载一组图. 我们进入图二的命令行, 输入:mmtdAndroid res_alipaymmtdAndroid 是命令的名称, 事先配置了环境变量, res_alipay 是文件的原创 2022-03-23 17:45:14 · 2536 阅读 · 2 评论 -
Jetpack Compose ScrollableTabRow 如何调整最小宽度
前言Jetpack Compose ScrollableTabRow 在使用的时候, 会发现无论怎么样, 最小的宽度始终不是自己设置的. 每个 Tab 之间间隔的很大. 而我们的 UI 上的效果是比较紧凑的. 所以这里给出解决方案问题原因在 ScrollableTabRow 的实现中, 使用了一个叫做 ScrollableTabRowMinimumTabWidth 的值, 他的值是:90.dp由于这个值外部没法修改. 导致任何情况下你的 Tab 最小的宽度都是 90.dp如何解决目前的解决方原创 2022-03-18 15:05:42 · 3189 阅读 · 0 评论 -
Android 如何保证逻辑业务类只初始化一次
前言我们的 Activity 由于系统配置更改等原因, 有可能会重建. 如果重建的时候, 业务逻辑类也是重新创建的, 那么也还可以接受.但是由于我们现在 ViewModel 用的人已经很多了, 在正确使用 ViewModel 的情况下, 业务逻辑类都会被 ViewModel 持有, 那么 Activity 重建的时候, 重新走 onCreate 就会导致有些初始化会走两次. 但是有 ViewModel 的作用下, 其实不用初始化了, 因为配置更改不会导致 ViewModel 中的任何数据被销毁和重建.原创 2021-10-25 17:06:00 · 1459 阅读 · 0 评论 -
Kotlin Inline 的原理和注意点
前言你的项目中, 是否写了很多的工具类? 比如 StringUtils, SPUtils, SystemUtils 等等那么此篇文章, 我来介绍一个关键词:inline, 我翻译为内联. 那么让我们来看一下内联函数的实现原理及其使用它的注意点普通扩展函数这里写了一个 SharePrefence 编辑的扩展函数fun SharedPreferences.edit( commit: Boolean = false, action: SharedPreferences.Editor.(.原创 2021-06-09 11:49:10 · 702 阅读 · 0 评论 -
你应该知道的协程中的挂起转化小技巧
前言相信很多小伙伴都在 Android 中使用了协程去处理各种异步的场景. 更有甚者 Flow 也能玩的如鱼得水. 这篇文章呢, 主要普及我们在使用协程的过程中, 如何转化其他代码为挂起函数, 让你的协程用起来更舒适.另外我们应该知道的是, 协程本质上是一个线程工具.suspendCoroutine & suspendCancellableCoroutine当我们开启了一个协程, 如果我们遇到了其他人写的代码或者某些 sdk 中的代码. 它是以 Callback 的形式提供了结果. 那么可.原创 2021-06-07 20:18:49 · 261 阅读 · 0 评论 -
你应该知道的 Flow 的 shareIn 和 stateIn 操作符
前言Flow 的 shareIn 和 stateIn 操作符可以转化一个 Cold Flow 到 Hot Flow:它可以把从上游 Cold Flow 中收到的数据广播给所有的订阅者(collectors/subscriber). 它通常用来提升性能, 甚至内部有缓存机制.知识点普及:Cold Flow 一被订阅或者被观察的时候, 就会产生数据. 通常订阅者可以观察到所有的数据. 而 Hot Flow 是不管有没有订阅者订阅, 它都保持活跃, 并且可能发射数据.在这个博客中, 你可以通过例子熟悉 s.原创 2021-06-04 17:49:30 · 3407 阅读 · 1 评论 -
Kotlin Flow 一种更安全的 UI 层收集流的方式
前言在我们的 Android App, Kotlin flows 通常用来收集 UI 层需要展示的那些数据. 但是你在收集数据的时候, 你得确保它不会做很多额外的事情、不会浪费资源、不会因为视图层退到后台或者销毁而引起内存泄漏.正因为 Kotlin flows 和 RxJava 都可能有上述的问题, 所以官方的 LiveData 是一个比较好的选择. 但是 LiveData 的局限性比较大, 它缺少了 flows 和 RxJava 的可组合性, 也缺少了很多的好用的链式操作符的支持.所以本文就是介绍如原创 2021-06-04 11:01:50 · 2216 阅读 · 3 评论 -
我应该为 Android 学习 Kotlin 吗
这么好看的你, 来都来了. 关注我. 了解更多最新知识点, 每天学习一点点前言自从 Google在 2017 宣布支持 Kotlin, 我们收到了很多 Android 上关于 Kotlin 的问题. 比如:我应该从什么时间开发学习它什么是学习 Kotlin 的最好的课程或者文档是否 Google 内部已经使用了 KotlinGoogle 对 Java 语言的计划是什么.这篇文章中, 我来回答这些问题.问题1:我应该学习 Kotlin 在 Android 中使用吗?相关的一些问题比如:.翻译 2021-05-31 19:42:25 · 209 阅读 · 0 评论 -
Why Kotlin
从 2020.11 开始全面使用 Kotlin 开发. 以前没有使用 Kotlin 之前, 我一直以为只是在 Java 的基础上多了很多的语法糖. 但是随着使用的深入, 我发现 Kotlin 是一门新的语言.现在的我已经喜欢上 Kotlin 了, 相对 Java 来说. Kotlin 的优势是巨大的. 我这边就简单的总结一下, 为什么我现在推荐 Kotlin 了. 如果你还在使用 Java 没有使用 Kotlin, 那你一定要仔细的看完文章哦参数默认值这个特性, 直接让 Java 中的大量重载的方法都原创 2021-05-29 13:55:31 · 244 阅读 · 0 评论 -
Android ViewModel 并不是直接写业务的讨论
前言Android 中的 ViewModel 出来已经有不少的时间了. 我作为一个忠实的使用者. 从开始用它, 到用错它, 到理解它. 还是走了不少冤枉路. 所以本次的内容会围绕 ViewModel 的正确使用. 并且如何融入到 MVVM 架构中官方 ViewModel 的作用解释Google ViewModel 的解释. 如果喜欢看官方的, 可以点链接去看. 这里我做一个总结:ViewModel 可以让你分离你 UI 上的数据. 比如某个视图的是否可见、比如 Adapter 的数据、比如某个 T原创 2021-01-26 10:15:12 · 802 阅读 · 4 评论 -
单 Activity 多 Fragment 架构如何使用路由进行统一跳转
前言有一些公司的项目, 采用的架构是单 Activity, 多 Fragment 的形式.核心就是依赖标记到静态方法上实现. Component 支持这种形式, 所以下面是以 Component 为例讲解的正文跳转一个 Activity, 多数框架都可以支持. 但是现在市面上所有的框架, 跳转 Fragment 只是一个名词, 只是通过服务发现获取到一个 Fragment 而已.比如下面的代码:Fragment fragment = Router.with("xxxFragment").putX原创 2020-09-17 21:43:15 · 1095 阅读 · 0 评论 -
Component 组件化框架
前言大家好, 此文用一个较详细的叙述来介绍 Android 的组件化框架 Component, 我从 17 年开始设计并且研究组件化框架的. 以及和其他框架相比, 为什么更优秀, 更好用。下文且听我细细道来~什么是组件化其实最简短的介绍就是下面几件事:代码的隔离资源的隔离当代码和资源隔离的时候, 各个平行的业务模块如何进行交互跨模块的调用路由跳转 Activity 跳转 和 ...原创 2019-11-07 11:12:29 · 1830 阅读 · 0 评论 -
Android 开发中的一些痛点解决方案
痛点我们团队在整个开发过程中, 会有几个很恶心的痛点, 代码不能不写, 但是写了有恶心. 所以在组件化过程中, 发现这些是可以被解决的的.于是 Component 从最早的设计上就考虑了一些痛点你有没有因为在 Adater 或者 Dialog 或者其他没有 Activity 的地方需要 startActivityForResult. 痛点解决方式,0入侵你有没有因为进入一些界面有前置条件...原创 2019-10-14 15:46:33 · 741 阅读 · 1 评论 -
ListView复用和优化详解
前言我们每一个Android开发人员对ListView的使用肯定是很熟悉的,然而多少人能真正的懂ListView的缓存机制呢,说白了就是ListView为了提高效率而内部实现的一种优化,而这种优化就需要复用ItemView(也就是item对应的View).那么下面楼主来对ListView和RecyclerView的item复用问题做一个深入的讲解原创 2016-11-09 17:09:34 · 18167 阅读 · 16 评论 -
自定义控件之-RelativeSizeTextView
前言 首先对于这个控件博主真的不知道取一个什么样的中文名字来解释,所以标题只能把控件的名字直接拎上来了,控件主要实现的功能就是显示一个可以配置大小和颜色的前置文本和后置文本,可能说的不太理解,没事,先看看效果图从效果图上可以看到中间是一个正常文本,两边可以显示不同大小和颜色的文本,这有什么用呢?不知道大家有没有见过这样子的效果这个效果自己使用SpannableString然后配合Relativ原创 2017-04-23 09:02:46 · 2643 阅读 · 0 评论 -
Android 开发中的注意点
前言 我们平常在开发Android的时候,经常会遇见命名感觉代码是对的,但是效果确实不尽人意的时刻.其实很多时候都是自己的代码或者其他地方没有注意到引起的.所以博主把博主开发的时候遇到的坑全都记录下来,方便自己查阅也做一个分享.会不断的更新资源文件方面selector选择器为什么不生效?如果你写的是点击反馈的选择器,那么做到下面两点就肯定生效了 1.状态是an原创 2017-07-12 18:33:22 · 369 阅读 · 0 评论 -
Retrofit 源码分析流程
前言 Retrofit 框架使用了有一年多了,但是说来惭愧,一直都是处于使用的状态,不会用的地方利用百度或者谷歌搜索一下.一直没有去摸索里面的源代码.这几天我对源代码进行阅读之后,不仅理顺了Retrofit 框架的实现,而且对泛型的认识提升到了一个新的高度.因为里面很多代码是对泛型进行处理的.下面就容许我给大家梳理一下Retrofit 的工作原理源码分析首先我定义一个接口文件public in原创 2017-07-30 18:03:13 · 1013 阅读 · 0 评论 -
Android Handler消息处理机制详解
前言从我们学习android开始,几乎每天都在和handler打交道.有了它,我们在子线程中处理好了耗时的操作,可以利用它来更新UI.它为我们在线程间的通信提供了很大的方便,而今天博客就来详细的介绍一下Handler的消息循环机制,一步一步的了解其中的奥妙,本文不介绍Handler的详细使用,探究的是内部的原理.所以看这篇博客的童鞋需要有handler的基本使用能力先抛出一个简单的原创 2016-05-11 10:48:24 · 13008 阅读 · 6 评论 -
面试总结
前言以下是本人面试过程中被问到的一些问题,这里做一个记录基础普及区Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念 你是如何理解MVC的M 就是数据源.所有的数据来源都可以视原创 2016-11-21 11:55:13 · 1030 阅读 · 0 评论 -
自定义View控件之onMeasure方法详解
前言转载请注明出处! 这类的文章很多很多,其实我也是不想写的.但是说起来我虽然看了很多很多的文章,但是对于View控件的measure方法还是一知半解的.那么今天我就来做一个总结,并且解决很多人问我的一些常见的问题.下面先把一些常见的问题罗列一遍 View控件中的measure方法被父容器调用,会引发测量的整个过程,也就有了onMeasure方法 父容器调用measure方法放在下原创 2017-07-25 23:12:30 · 6206 阅读 · 5 评论 -
自定义控件之-流式布局FlowLayout
前言 其实对于流式布局控件,很多人并不陌生,项目中或多或少都会用到的.但是有多少人会写一个流式布局的控件这就不知道了,所以博主这里对流式布局进行一个讲解,并且封装一个比较完善的控件效果图看到的这个整个就是一个流式布局,里面是很多个TextView,博主使用了一个圆角的背景为了显示的好看一点,当然了,流式布局控件并不关心里面的控件是什么控件,任何控件在流式布局内部都是可以显示的效果图上了,接下来原创 2017-04-29 13:44:32 · 2191 阅读 · 3 评论 -
属性动画之Rx框架
前言 我们都知道,Android中有了属性动画之后,我们的动画再也不是表面功夫了,他可以实实在在的改变控件的属性.而这个改变属性的动作不断的执行就形成了动画,也就是我们属性动画的原理关于属性动画的使用详解请移步博主的另一片博客:属性动画使用详解下面让博主一步一步来解释封装一个属性动画的重要性这个界面有三个按钮,xml就不分享出来了,很简单Activity中的代码分享一下public class原创 2017-03-30 14:15:57 · 831 阅读 · 3 评论 -
自定义控件之-横线指示器
前言 其实指示器的自定义控件太多了,但是需求时刻在变,总有不满足的时候,所以就得自己来绘制 因为博主遇到了横线形式的指示器,所以特地分享一下,同时也教一下不会自定义的童鞋效果图可以看到可以和ViewPager一起联动,下面就写出实现的过程首先我们需要弄明白几个点 1. 绘制每一个指示器通过canvas的绘制圆角矩形就行 2. 每一个指示器Item都需要一个Rect对象来描述绘制的位置原创 2017-04-06 21:55:00 · 2828 阅读 · 0 评论 -
Android 九宫格控件的制作之旅
前言在博主的一个小项目中,需要实现动态列表中的条目有显示多张图片的功能,目前在demo中的效果是下面这样子的可以看到上面的九宫格的控件显示的效果是蛮好的,图片的个数不同,显示的效果就不同.那么博主就带大家做一下下啦原创 2016-06-15 15:15:34 · 2762 阅读 · 6 评论 -
自定义仿QQ主界面选项卡
自定义QQ主界面选项卡QQ Android版本的效果先贴上来可以看到这个可爱的选项卡,其实使用xml布局可以很容易的弄出来,但是博主就带大家封装成一个自定义控件!博主实现的效果这速度。。。抱歉哈,博主也不知道为啥这么快。。。。可以看到,支持的还是挺丰富的,还支持包裹,根据自定义属性tabWidht来计算宽度 其实实现起来很简单,下面博主就带小白们来实现一下,大牛请忽略分析问题实现上述的效果,如果我原创 2017-03-07 22:37:49 · 2539 阅读 · 0 评论 -
如何为你的Activity减轻负担
前言 我们都知道哈,如果一个界面的逻辑够复杂,那么你的Activity如果在不进行优化或者细分的情况下的代码量会异常的多,那么现在博客就和大家来讨论一下如何给activity减轻负担!分析为何Activity的代码会很多 为什么我们的Activity中的代码会很多呢?这是因为在activity里面你既要写 显示View的逻辑、数据处理的逻辑、网络请求的逻辑、可能还有其他乱七八糟的逻辑原创 2017-02-08 14:37:17 · 1826 阅读 · 13 评论 -
retrofit2 使用完全解析(1)
前言上一篇文章博主介绍了okhttp这个同步的网络请求框架的使用,也说了okhttp的优点,但是同时也指出了okhttp在使用方面的不便,所以本文介绍基于okhttp的网络框架retrofit的使用,还是同一个公司的产品.1.支持异步请求2.用户自己定义请求接口,由框架自动通过代理实现,这就相当于把网络请求的部分代码抽取出来,代码更加简洁3.利用注解描述请求的参数,极大的方便了用户原创 2016-06-10 17:31:28 · 5138 阅读 · 10 评论 -
Android开发踩过的坑
1.Fresco加载本地图片的问题在小米note 6.0手机上加载裁剪过的图片,发现有一个隐形的Bug,具体我也不清楚,只知道立即对裁剪过的图片地址进行加载的时候,加载失败,需要等待几秒后,重新加载就可以了,但是用Glide立即加载就没问题,这个问题很头疼!导致我在选择头像裁剪后不能正常显示2.资源文件命名的问题不能对每个界面的使用到的资源起唯一或者一个公用的名字,资源名称只要能描述这个资源的使用场原创 2016-10-20 10:15:51 · 1123 阅读 · 0 评论 -
Android mvp模式设计讨论
前言 刚开始学习mvp在android中使用的时候,我记得我是看了鸿洋大神的博客浅谈 MVP in Android 其实当时看了是蛮激动的,满心以为自己学会了mvp的设计,而且不管看谁的mvp介绍的博客,基本上都是一个样,让我深深的以为mvp就是想象的那么简单。当我真的在项目中使用的时候,我才发现mvp并不是那么简单,回过头再看鸿洋大神的博客的时候,才发现他讲的是真的如标题所说:浅谈,或者原创 2017-01-02 17:28:25 · 632 阅读 · 0 评论 -
Android NDK开发之生成头文件
前言 鉴于经常忘了如何生成头文件的骚操作,这里做一个记录,同时也做一个分享.文章以Android开发工具Android Studio为例现在你在Activity中写了一个本地方法,看下图这时候,我们找到包名所在的目录,假设是 :本人是mac系统,所以是下面的一个目录/Users/cxj/Code/android/project/Demo/ndk1/src/main/java/com/move/原创 2017-08-12 22:28:29 · 1266 阅读 · 0 评论 -
ButterKnife 完全解析
前言 使用 ButterKnife 也有一段时间了,还记得我们从最开始的findViewById到现在使用注解来帮我们注入控件。其实这中间还有一个使用反射实现注入的一个阶段,真是因为在追求性能和今天,ButterKnife才会被广泛的使用.那么到底ButterKnife高效在哪里?今天博主带你全面了解ButterKnife本文针对版本8.8.0讲解首先在build.gradle中添加以下依赖必原创 2017-08-06 16:27:46 · 1498 阅读 · 2 评论 -
组件化为什么选择 Component 而不是 ARouter
目录前言评判标准组件化你到底想解决什么问题?除了核心问题其他的痛点路由跳转失败的降级处理路由拦截器页面拦截器全局拦截器路由接口用户自定义的部分的执行线程都是主线程获取跳转目标的 `ActivityResult` (贼好用!!!!!!)自定义目标界面的 `Intent`扩展支持 `RxJava2`请相信 Component前言我们很多人都知道 ARouter, 也会优先选择 ARouter, 这...原创 2019-09-16 10:57:52 · 1102 阅读 · 0 评论 -
一篇文章弄懂 RxJava
前言RxJava 是 ReactiveX 在 Java 上的一个实现.官网为:http://reactivex.io/笔者是一个做 Android 的开发者,RxJava 从入门到现在的水平已经过了两年的时间.其实这东西入门真的挺难的.很多人看了几篇介绍的博客就觉得自己会了.其实并不是这样的.因为很多人看了之后依然不明白内在的很多东西,比如:线程切换切换订阅线程信号分发线程操...原创 2019-07-23 09:05:23 · 1573 阅读 · 3 评论 -
什么是 Android 组件化
前言我希望阅读本片博客的童鞋都是有一定的 Android 基础的,并且近期想实施组件化方案的.希望这篇文章能帮助到你,让你知道什么是组件化,有哪些可选的方案什么是组件化下面这幅图相信大家平常多多少少都能看见类似的.最下面一层是 基础组件层, 包括但不止以下方面存储本地存储数据库存储文件存储SP 存储…网络请求实体对象基础类BaseActivity、BaseF...原创 2019-06-17 11:22:47 · 3403 阅读 · 5 评论 -
Android 组件化应该做什么
前言Android 任何一个组件化方案都要对项目进行一定程度的整改,下面会对所有需要整改的地方进行说明,以及会说到如何整改资源文件资源文件在准备组件化的过程中就得做,不会影响正常的开发,一旦后续需要彻底剥离的时候,就直接把对应的文件拖到指定的模块就可以了公用的资源一个项目中肯定有一些是每一个地方都可能用到的资源,所以会有一个模块去存放这些东西,我可能新建一个 “ModuleResou...原创 2019-04-04 09:41:45 · 207 阅读 · 0 评论 -
Android 组件化的使用
当前博客新地址http://xiaojinzi.tpddns.cn:18888/post/Android组件化的使用.html前言其实组件化方案很多很多,让人选择也是很多很多,但是为什么每一家有技术积累的公司都会参考别人的组件化方案自己去修修改改或者自己实现一套呢?往下看吧技术的选型使用开源的库的缺点和优点缺点缺乏一些自定义的操作,总是会受制于人的出现问题不能及时解决有些...原创 2018-12-09 23:30:16 · 510 阅读 · 1 评论 -
Android DataSource 层实现
前言 在 Android 日益成熟和完善的阶段,我们的项目也日益的开始注重性能和可维护性.今天要和大家聊一聊Android 项目里面的 DataSource首先我们可以理解 DataSource 是一个单独的 Module,可以对外提供很多的数据操作 - 网络请求 - 本地的一些数据的持久化 - 一些第三方的数据封装 - 项目中一些Runtime的数据(比如用户信息,是否登录...原创 2018-09-11 09:52:53 · 2912 阅读 · 0 评论 -
Android 组件化的实现
前言 哈哈哈哈,我又回来了,小金子又回来了,好久没写博客了,是时候更新一波了 最近项目在做组件化,然后这次给大家带来组件化的实现和应用组件化方案地址下面这张图我们很熟悉,我们今天要做的事情就是实现如下的架构组件化带来的问题Activity 之间的交互业务组件内的服务如何提供业务组件的声明周期怎么解决 我们带着上面的几个问题,我们来实现我们的组件化...原创 2018-08-17 16:33:55 · 2400 阅读 · 0 评论 -
RxJava2 进阶之Observable 的种类及其对应的场景
目录前言Observable 的种类真实代码中如何辨别使用哪种 **Observable**前言这篇文章主要讲述一件事情,如何正确的定义我们程序中的 Observable,下文中所有说到的信号,和我们常说的 RxJava发射的元素、Item、Error、Complete是同一类东西,但是我习惯叫它信号,在ObjectC中的Rac中也称之为信号Observable 的种类在 RxJava2...原创 2019-04-13 17:30:49 · 1224 阅读 · 0 评论 -
测试环境请求可视化方案
前言 在我们平常的项目开发中,我们接触最频繁的就是和后台交互,请求服务器了.如果你的项目不使用加密,那么当一个手机出现问题的时候,我们可以很容易的使用各种截包工具拿到请求分析原因.但是绝大部分的项目请求的数据一般都是加密的,所以我们的截包工具就显的很鸡肋了,因为你截取到的是一堆加密后的数据,虽然你可能有解密的方式,但是这个过程是需要耗费时间的,如果一些数据是使用MD5加密的,你更加无从知道...原创 2018-04-10 11:13:53 · 566 阅读 · 0 评论