Android
文章平均质量分 93
小久久601
这个作者很懒,什么都没留下…
展开
-
深入理解Kotlin协程
异步调用是否发生,取决于resume函数与对应的挂起函数的调用是否在相同的调用栈上,切换函数调用栈的方法可以是切换到其他线程上执行,也可以是不切换线程但在当前函数返回之后的某一个时刻再执行。test方法一调用直接return返回了,没有发生挂起操作,test2方法使用suspendCoroutine获取当前所在协程的Continuation的实例作为参数将挂起函数当成异步函数来处理,然后开启了一个thread执行resume操作,因此无法同步执行,会进入挂起状态,直到结果返回。原创 2022-09-28 13:57:02 · 1142 阅读 · 1 评论 -
组件化开发
单工程遇到的问题随着项目逐渐发展,业务越来越多,代码量也越来越多,耦合严重,层次混乱,页面互相之间的跳转有着极强的关联性,所有代码都写在app module中,编译一次都要5-6分钟,为了方便以后项目的开发/测试以及提高编译性能就需要进行组件化了。组件化的优势降低耦合度:每个业务模块无不关联,可自由拆卸、自由组装,重复利用加快编译速度:每个组件可以单独编译运行,发布时也可以合并成一个app。提高协作效率:团队中每个人负责自己的组件,不会影响其他组件,降低团队成员熟悉项目的成本。组件如何划分原创 2022-03-31 16:01:02 · 5350 阅读 · 0 评论 -
Binder机制
前言作为Android开发者一定知道Binder机制,Binder是Android系统提供的一种IPC机制(进程间通讯机制),比如在Android中的四大组件都会涉及到AMS通信,而这种跨进程通信都是由Binder来完成的,我们通常说Binder就是Android中的血管系统。而Binder机制是非常复杂的,要想完完整整搞懂是非常不容易的,作为应用层开发者来说理解其基本的原理就可以了,因此本文不会涉及到Native层和Kernel层。多进程的优势一般我们开发的app都是默认一个进程的,但是虚拟机给每个原创 2022-03-31 15:54:22 · 3813 阅读 · 0 评论 -
Kotlin协程及在Android中的应用
什么是协程协程并不是kotlin中才有的概念,在Python、Go等中也有协程。初学kotlin协程对这个概念很迷惑,比如官方文档上说:协程是一种轻量级的线程,我们很容易将协程和线程联系起来产生误解,认为协程也是一种线程。其实协程的实现也是离不开线程的,它也是跑在线程中,可以是单线程也可以是多线程,简单来说协程就是一个线程的框架。我们可以在实际的开发中去理解它,在android中避免不了要使用网络请求数据,网络请求必须要在子线程中执行,获得的数据必须要在主线程更新UI,这就一定会在子线程和主线程之间来回原创 2021-02-26 17:11:30 · 468 阅读 · 0 评论 -
Gradle插件实战之编译期修改代码
背景在工作中我们经常会用到第三方库,不可避免这些库中会有各种问题,没办法只有给开源库作者提issue,但是这种效率很低,而且作者不一定会去修改,因此只有自己去改。解决方案我们可以把项目chone下来修改,但是这种效率很低,也可能会遇到不可预知的问题,这样大大增加了开发成本。开发Gradle插件,利用Javassit动态修改class中已有的方法,这种方法效率很高,不会影响到源码。Javassitjavassist是一个动态修改java字节码的开源库,它可以在编译好的class文件中添加/修改原创 2021-01-24 17:03:24 · 3907 阅读 · 10 评论 -
快捷修改AndroidManifest中configChanges属性
问题最近在使用我们的app发现了一个问题,当打开app使用系统的分屏功能时页面会重新加载,导致体验不好。通过查阅Android文档,原因是在运行时发生配置变更时,默认情况下会关闭 Activity 并将其重启。可以在configChanges属性申明配置来防止Activity重启。以下内容摘自文档:值描述“density”显示密度发生变更 — 用户可能已指定不同的显示比例,或者有不同的显示现处于活跃状态。此项为 API 级别 24 中的新增配置。“fontScale”字体原创 2020-12-02 16:30:57 · 718 阅读 · 0 评论 -
EditText在ScrollView中获取焦点自动滚动问题
问题:在实际开发中会遇到表单页面,表单中有很多选项,包括EditText等,这样会导致一屏显示不下,我们通常都会添加一个ScrollView使其页面可以上下滑动。 <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent"原创 2020-09-03 16:27:17 · 1729 阅读 · 2 评论 -
自定义ViewGroup中child绘制顺序
背景在项目中需要显示一组用户头像(见下图),右边的图片有一部分在左边的图片下面,依次叠加。我们可以使用LinearLayout,然后每个图片向左偏移-xdp,但是这样做你会发现实现的效果并不是这样,而是右边的头像在左边的头像上面。这是因为ViewGroup绘制子view的顺序导致的,先添加的view先绘制,我们可不可以改变ViewGroup的绘制顺序呢,当然可以,在View中有一个方法setTranslationZ(float translationZ),translationZ值越大优先级就越低原创 2020-08-22 10:37:02 · 631 阅读 · 0 评论 -
IdleHandler原理及应用
一原创 2019-12-03 11:47:18 · 2432 阅读 · 0 评论 -
Fragment.startActivityForResult不回调onActivityResult
问题前段时间在开发中遇到一个问题,在Fragment中启动一个Activity并返回数据,但是结果并没有回调onActivityResult方法,代码很简单应该没什么问题呀。在网上查资料,都是说是因为调用activity.startActivityForResult造成的,应该fragment.startActivityForResult,试了下发现确实可以解决问题,但是原理是什么呢?原理我...原创 2019-08-10 15:57:15 · 1407 阅读 · 0 评论 -
Jetpack系列组件之ViewModel
Jetpack简介在2018年Google I/O大会发布了一系列辅助android开发者的实用工具,统称Jetpack,Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。ViewModel这篇文章主要讲ViewModel的使用及原理。ViewModel主要用来管理...原创 2019-07-28 13:21:00 · 1093 阅读 · 0 评论 -
Android埋点之圈点选择
前言在上一篇博客中基于滴滴DroidAssist插件实现了无痕埋点,这样用户的操作路径就通过了接口上传到了服务器,然后后台制作图表,产品经理进而分析和优化产品后续的体验,也可以为产品的运营提供数据支撑。但是现在我们上传的View路径都是这样的MainActivity/LinearLayout[0]/LinearLayout[7]/TextView[2],这些路径别人是看不懂的,所以就需要给这些路...原创 2019-07-19 22:56:05 · 730 阅读 · 2 评论 -
Android自定义TabLayout无效
今天要实现这样的一个效果,下面的indicator是一个不规则的矩形,所以使用原生的TabLayout必须用定制的CustomView,在切换的时候动态更换CustomView的背景。方法很简单,代码如下: val tabTitles = arrayOf("全部", "合格证", "发票", "打款凭证", "其他票据")tabTitles.forEach { va...原创 2019-07-14 15:02:15 · 1512 阅读 · 0 评论 -
Glide自定义缓存失效之signature
发现问题今天测试提了一个bug,说Android图片显示的和IOS不一样,于是我就看了下代码,发现字段和IOS用的是一样的啊,这就让我感到很郁闷了。于是我仔细看了下接口返回的图片地址发现地址有点奇怪,图片的地址是https://sxbkj-test.oss-cn-hangzhou.aliyuncs.com/shop/public/bg.png,这个图片地址的命名是以bg.png命名的,公司的图片...原创 2019-06-24 21:53:03 · 2349 阅读 · 0 评论 -
基于滴滴DroidAssist插件实现无痕埋点方案
无痕埋点概念无痕埋点也叫无埋点、全埋点,它是一种数据采集的重要方法。由于业务更新迭代快、代码量大,手动埋点错误率高并且还费时费力,所以手动埋点不是明智的选择。这时候就需要无痕埋点,它不需要开发人员手动的写数据采集的代码,而是通过动态插入代码的方式,大大地减少了程序员的工作量。无痕埋点方案方式一:全局Hook App中的View方式二:AOP编程(Aspect-Oriented Progr...原创 2019-07-02 22:05:43 · 2438 阅读 · 0 评论