
Android 实战
文章平均质量分 87
Android 开发从基础到高阶,技术知识内容丰富,值得您长期关注,温故而知新。
艾阳Blog
不积跬步无以至千里,不积小流无以成江海。闻道有先后,术业有专攻。不忘初心,方得始终。
展开
-
Android 性能优化(七):APK安装包体积优化
移动 App 特别关注投放转化率指标,而 App 包体积是影响用户新增的重要因素,而 App 的包体积又是影响投放转化率的重要因素。新业务超过要总裁审批,一般在平台组都卡掉了。原创 2024-04-17 11:36:44 · 1312 阅读 · 0 评论 -
Android 属性动画及自定义3D旋转动画
属性动画框架,基本可以实现所有的视图动画效果。相比属性动画,视图动画一个非常大的缺陷就是不具备交互性。当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互发生,且效率较高使用方便。原创 2024-04-09 13:07:53 · 1492 阅读 · 0 评论 -
Android 动画之视图动画的使用
导导Android的动画框架包括帧动画、视图动画(又叫补间动画)、属性动画。在Android3.0之前,视图动画一家独大,但随之后属性动画框架被推出。相比属性动画,视图动画一个非常大的缺陷就是不具备交互性。当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互发生,且效率较高使用方便。视图。原创 2017-02-23 15:05:57 · 3531 阅读 · 1 评论 -
Hybrid混合开发 和 JSBridge 的使用
JSBridge 简单来讲,主要是 给 JavaScript 提供调用 Native 功能的接口,让混合开发中的『前端部分』可以方便地使用平台的地图定位、相册、摄像头等 Native 功能。实际上,JSBridge 就像其名称中的『Bridge』的意义一样,是 Native 和非 Native 之间的桥梁,它的核心是 构建 Native 和非 Native 间消息通信的通道,而且是“双向通信”的通道。原创 2024-04-08 21:53:40 · 1179 阅读 · 0 评论 -
Android 性能优化(六):启动优化的详细流程
业内常见的app启动过程阶段一般分为「启动阶段」和「首刷阶段」。启动阶段:指用户点击icon到见到app的首页,起点为的Activity的()。首刷阶段:指用户见到app的首页到首页列表内容展现起点为Activity的onCreate,终点列表的onAttachedToWindow()。为了确保启动优化量化指标的数据能稳定和完整。启动过程中App退后台用户未登录场景特殊场景下的开屏广告,比如有复杂的联动动效站外push、deeplink拉起。原创 2024-03-27 14:31:29 · 5154 阅读 · 0 评论 -
操作系统(Android&IOS)图像绘图的基本原理
各个平台几乎所有用于开发GUI(图形用户接口)框架的,编程语言都会在操作系统提供的API之上再封装一层,将操作系统原生API封装在一个编程框架和模型中,然后定义一种简单的开发规则来开发GUI应用程序。像素的颜色是有RGB三基色组成,比如1600万即2的24次方,即每个基本色(R、G、B)深度扩展至8 bit(位),颜色深度越深,所能显示的色彩更加丰富靓丽。但是对于应用开发者来说,直接调用这些操作系统提供的API是比较复杂和低效的,因为操作系统提供的API往往比较基础,直接调用需要了解API的很多细节。原创 2024-03-14 19:11:43 · 742 阅读 · 0 评论 -
移动端研发技术的进化历程
移动端研发技术主要分为原生开发和跨平台开发。本章主要介绍一下移动开发技术一步一步发展的进化历程。原创 2024-03-13 18:59:06 · 1447 阅读 · 0 评论 -
Kotlin:run、runCatching、runBlocking、runInterruptible
run和runCatching是 Kotlin 标准库的一部分,可以在所有支持的平台上使用。runBlocking和runInterruptible是 Coroutines 协程的一部分。原创 2024-01-16 14:25:20 · 2652 阅读 · 0 评论 -
Android 动态代码设置view宽高参数,运行后UI大小没有改变问题
日常开发中遇到一个需求,就是根据业务逻辑,动态改变一个view控件的大小。这种需求也是比较常见的,但是小白比较容易遇到一个小问题,就是代码重新设置了view的宽高大小,运行后发现view没有发生改变。原创 2023-02-24 19:51:05 · 1567 阅读 · 0 评论 -
Android 增加布局圆角功能,支持背景裁切圆角
我们Android开发同学最常见、频繁画UI时会遇到有角度的布局。例如:通常,我们都会在drawble文件夹下创建Shape.xml去实现对吧?当然这样的代码实现方式没毛病。但是,项目大了业务繁杂,工程中会出现很多此类文件,显得非常臃肿,而且不方便复用,不利于研发效率提升。那么,我们就会思考,是否可以有一种能更快捷且优雅的方式实现这个圆角布局。原创 2022-11-16 22:33:27 · 1377 阅读 · 0 评论 -
Android View绘制及事件(四)自定义组合控件+约束布局ConstraintLayout+自定义控件属性
前言上一章《Android 自定义View前世今生,View绘制流程》介绍了自定义View的实现方式大致有三种:自定义组合控件、继承系统控件(如TextView、ImageView等)、继承View或ViewGroup。这章专门学习自定义组合控件实现方式,将多个控件组合成为一个新的控件,能够解决多次重复使用同一类型的布局的问题。另外介绍一下,本章将使用主流的约束布局ConstraintL...原创 2019-06-28 19:17:24 · 6448 阅读 · 1 评论 -
Android ViewPager Fragment 切换刷新数据,解决生命周期只走一次的问题
前言Activity的生命周期都应该熟悉,Fragment其标准生命周期也仅比Activity多出一些流程,如onCreateView(),比较好理解。了解Activity、Fragment的基础知识可以先转头去看下我的博文:Android Fragment项目中使用及生命周期分析认识ViewPager页面加载机制ViewPager的页面缓存机制默认是两个,如果有三个Fragment,实际上三个都...原创 2017-09-21 17:29:31 · 16893 阅读 · 3 评论 -
Android Activity、Viewpager嵌套Fragmen生命周期分析总结
目录一、Fragment生命周期:二、fragment在replace()切换生命周期变化三、Activity嵌套Fragment的生命周期变化四、ViewPager 中 Fragment的生命周期五、交互知识总结1、与MainActivity沟通, 使用碎片中的控件:2、与MainActivity沟通,碎片中使用MainActivity的控件:3、Fragmen...原创 2017-02-20 17:41:52 · 2038 阅读 · 1 评论 -
Android 手机号344格式化,字符串拼接和EditText输入框
国内手机号一般11位数字,在登录注册等页面经常会用到,其他信息介绍页面也可能会用到手机号的显示。原创 2023-05-10 10:20:18 · 513 阅读 · 1 评论 -
Android App首页全局黑白化方案探索
关于黑白化页面,这几年是比较常见的场景。比如,在清明节或特殊时政,各大APP都会进行黑白化处理。普通小白刚接到需求的时一定会感觉是不是好麻烦,要搞一套换肤吗?下面有三种实现方案,一起来探索吧!最后咱们再总结一下黑白化方案:使用了 ColorMatrix 设置饱和度为 0,设置到 Paint 中,让根布局拿着这个 Paint 去进行重绘。原创 2023-06-12 11:41:07 · 896 阅读 · 0 评论 -
(三)RecycleView 自定义下拉刷新,上拉加载监听
Android 使用RecycleView实现吸附小标题的Demo(附源码)Android 探究onCreateViewHolder和onBindViewHolder两者关系和调用次数前言上面两篇讲解了RecycleView创建和绑定子项的认识,特别是Recycleview的进行自定义子项装饰类ItemDecoration,实现了吸附标题的功能,其中涉及到了自定义View绘图技术点。...原创 2019-07-31 19:21:57 · 2191 阅读 · 0 评论 -
Android 图片加载库改造
1、异步任务处理返回后,activity已经销毁,此时进行加载图片,会报异常You cannot start a load for a destroyed activity ,App会崩溃1). 一个是网络请求,但由于rxjava异常拦截的原因,不会崩溃@Overrideif (data!2) 另一个是其他异步任务回调中处理图片就会崩溃了,类似下边的代码@Overridetry {});}.start();finish();原创 2023-07-15 21:03:42 · 765 阅读 · 0 评论 -
Android 开发规范(基础版)
style的name命名使用大驼峰命名法,几乎每个项目都需要适当的使用 styles.xml 文件,因为对于一个视图来说,有一个重复的外观是很常见的,将所有的外观细节属性(colors、padding、font)放在 styles.xml 文件中。项目的代码时间时间很长,经过太多人手,代码的规范性堪忧,目前存在较多的比较自由的「代码规范」,这非常不利于项目的维护,代码可读性也不够高。分析现有项目的代码的情况,输出的『定制化规范』文档,用于提高代码的可读性和可维护性。原创 2023-07-15 22:01:31 · 1303 阅读 · 0 评论 -
Kotlin 集合listOf、mutableListOf、arrayListOf
调用Array原创 2020-07-07 12:44:03 · 2683 阅读 · 1 评论 -
Android Kotlin之let、with、run、apply、also函数的使用
相比Java语言Kotlin更加简洁安全高效。不仅支持lambda表达式,还支持非空验证机制,另外提供一套源码标准库(Standard.kt)。但是,对于Kotlin的初学者来说,可能会经常写编写出不够优雅的代码,而Kotlin提供了一些内置函数便可以帮助优化代码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。let函数实际上是一个作用域函数,当需要去定义一个变量在一个特定的作用域范围内时,就可以使用let函数。原创 2022-09-27 14:31:14 · 3576 阅读 · 0 评论 -
Android 项目主题样式库:统一颜色、字号,避免重复开发
组件化多业务模块情况下,各模块中存在一些字号、颜色等样式定义、引用相对混乱的现象。大部分业务开发同学会随意使用颜色和字体等,没有明确的统一格式进行调用。因此,导致项目中相关重复定义颜色字号增多失控,不易维护,增加包体积,开发同学的在使用上不够简单高效,经常编写重复代码。原创 2022-09-21 19:23:01 · 1680 阅读 · 0 评论 -
Android Jetpack之LiveData 使用及源码
LiveData 是一种持有可被观察的数据存储类。和其他可被观察的类不同的是LiveData 可以在 Activity ,fragment 或者 service 生命周期发生改变时通知更新。LiveData 已经是必不可少的一环了,例如 MVVM 以及 MVI 开发模式中,都用到了 LiveData。原创 2022-09-15 16:37:37 · 1478 阅读 · 0 评论 -
Android Jetpack之DataBinding+ViewModel+LiveData+Room
Jetpack是一个由多个技术库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。原创 2022-09-13 15:16:33 · 886 阅读 · 0 评论 -
Android Jetpack之ViewModel、LiveData
Jetpack是一个由多个技术库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。页面翻转数据状态保留不再需要手动处理生命周期数据始终保持最新状态不会发生内存泄露异步情况,不会因Activity停止而导致崩溃。原创 2022-09-13 11:34:28 · 1077 阅读 · 0 评论 -
Android Jetpack之LifeCycle
LifeCycle在其内部管理自己的生命周期,从而解藕页面和组件,降低内存泄露发生的可能性,Activity、Fragment、Service、Application均有LifeCycle支持。现在越来越多的公司招聘要求Jetpack是必会项目,Google也在疯狂的更新Jetpack组件,热度完全不亚于Kotlin!如图所示,Jetpack是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。原创 2022-09-09 16:02:58 · 890 阅读 · 0 评论 -
Android View转换为Bitmap,实现截屏效果
安卓设备一般都自带截图功能,但是用户体验有不好之处。就是会连带着状态栏📶、🔋、时间日期、其他不必要页面中信息,等等与用户想截屏的内容不符的信息也会被保存下来。通常,截图后用户会再次裁剪一次才能想把真正需求分享出去。因此,咱们技术研发会遇到针对性的会做一些应用内的截屏功能。原创 2022-09-08 16:44:30 · 2393 阅读 · 0 评论 -
Android中Textview文本变化父布局宽度不变问题
这是一篇关于布局绘制刷新的小案例,实战经验总结分享。问题描述:一个 LinearLayout,宽和高都是自适应wrap_content。里面放一个TextView,宽和高都是自适应wrap_content。当TextView调用setText()方法改变文本显示时,LinearLayout的宽度只能跟着改变的问题。根据Android View绘制及事件(三)自定义View及View绘制流程。原创 2022-05-09 16:22:30 · 3744 阅读 · 2 评论 -
Android View绘制及事件(六)View刷新机制
目录前言一、流程图解二、方法解析1、RequestLayout()2、invalidate()3、postInvalidate()三、小结1、invalidate()和requestLayout()2、invalidate()和postInvalidate()前言在之前系列中《Android View绘制及事件(三)自定义View及View绘制流程》介绍了View的绘制流程。 这里在做一次补充一下对于调用view的刷新会走...原创 2022-05-07 19:14:39 · 1701 阅读 · 0 评论 -
Android TextView 是否有省略号,动态获取和设置行数
目录前言一、TextView设置最大行与省略号二、检查文本是否省略三、实战前言 最近在做一个效果,就是当文本显示超出2行时,文本末尾出现...(省略号),并且显示一个【展开】的按钮。点击时【展开】全部文本内容,并且按钮由【展开】变成【收起】。点击【收起】文本恢复到一开始状态。一、TextView设置最大行与省略号单行显示,如果超出的话用“…”省略号显示,只要设置:android:ellipsize="end"android:singleL...原创 2022-02-23 10:40:19 · 5065 阅读 · 0 评论 -
Android TextView单行带着图标,末尾省略号,图标可点击。
Android-TextView单行带着图标,末尾省略号,图标可点击。原创 2022-02-22 11:29:27 · 3645 阅读 · 2 评论 -
Android 截屏监听分享
目录前言一、FileObserver对比ContentObserver二、本文通过ContentObserver实现三、实测兼容性前言网上一般列举的有三种方法利用FileObserver监听某个目录中资源变化情况。 利用ContentObserver监听全部资源的变化。 监听截屏快捷按键 ( 由于厂商自定义Android系统的多样性,再加上快捷键的不同以及第三方应用,监听截屏快捷键这事基本不靠谱,可以直接忽略 )。一、FileObserver对比ContentObse转载 2021-11-01 16:22:41 · 2059 阅读 · 0 评论 -
(七)RecycleView 性能提升、卡顿优化(绝对干货!!)
目录前言一、RecycleView 性能提升(1)卡顿原因:(2)优化提案:二、布局、绘制优化三、视图绑定与数据处理分离四、notifyxxx()局部刷新(1)常用的5个列表刷新(2)处理刷新闪烁问题五、改变mCachedViews的缓存六、共享RecycledViewPool(1)嵌套RecycleView卡顿原因(2)解决嵌套RecycleView卡顿七、惯性滑动延迟加载(1)快速滑动RecycleView卡顿原因:(2)解决快速滑动造成.原创 2020-07-15 20:39:05 · 4022 阅读 · 0 评论 -
(六)RecycleView 回收复用机制总结
目录前言一、Recycle 类二、四级缓存三、缓存详解四、复用详解前言众所周知,RecycleView 本身就是一款非常优秀的可回收、复用的原生控件,有着极高的灵活性,能够在应用中承担展示大量数据的艰巨任务。在日常开发中,使用也非常广泛。本篇将一起了解一下 RecyclerView 内部是通过怎样的缓存复用机制来实现这一功能的。推荐阅读(一)RecycleView 初探回收复用,onCreateView和onBindView调用关系(二)RecycleView .原创 2020-07-14 14:08:31 · 1029 阅读 · 0 评论 -
(五)RecycleView 动态设置改变列表显示的高度,禁止滑动
推荐阅读(一)RecycleView 初探回收复用,onCreateView和onBindView调用关系(二)Android RecycleView实现吸附小标题的Demo(附源码)(三)RecycleView 自定义下拉刷新,上拉加载监听(四)RecycleView 滑动到置顶、Adapter局部刷新(五)RecycleView 动态设置改变列表显示的高度前言RecycleView 是一个可回收复用的列表控件,也是使用较普遍的。在使用时也会结合业务功能需求做出一些改变。比.原创 2020-07-09 18:58:50 · 3216 阅读 · 1 评论 -
(二)Android RecycleView实现吸附小标题的Demo(附源码)
先上,效果图源码地址GitHub:https://github.com/aiyangtianci/StickyDecoration码云 : https://gitee.com/AiYangDian/StickyDecoration因为实现列表展示的数据和基础实现在上一章讲解了,请看上一篇:Android 探究onCreateViewHolder和onBindViewHolder两者关系和调...原创 2018-04-26 19:47:34 · 3485 阅读 · 3 评论 -
Android 监听EditText输入框软键盘显示及隐藏
由于,安卓系统并没有提供软键盘弹入和弹出的方法。所以,我们需要自己自定义一个监听软件盘的类。大致实现原理就是监听视图树中布局或可视状态发生改变超过一定的数值,来监听软键盘的弹入弹出事件。原创 2020-06-29 19:47:59 · 5601 阅读 · 1 评论 -
Android 一篇讲完Crash治理之OOM及内存检测工具
系列推荐:Android性能优化(一)闪退治理、卡顿优化、耗电优化、APK瘦身Android 性能优化(二)Handler运行机制原理,源码分析Android 性能优化(三)认识错误Error和异常Exception及栈轨迹StackTraceAndroid 性能优化(四)Crash治理之路,UncaughtException前言性能优化第一篇中的Crash治理说过:...原创 2020-04-03 19:26:08 · 3930 阅读 · 1 评论 -
Android View绘制及事件(五)View点击事件响应及分发过程详解
它是一个包装了很多触摸事件的实体类,用于存储UI界面与用户交互时的事件信息,如事件类型(按下、抬起、滑动)、x\y坐标值、发生的时间等。触摸点在屏幕上的绝对坐标,坐标值相对于屏幕而言;基于该View的坐标值;getAction,4种常用类型:ACTION_DOWN、ACTION_MOVE、ACTION_UP、ACTION_CANCEL。getActionMasked,多2种:ACTION_POINTER_DOWN、ACTION_POINTER_UP。原创 2019-05-09 18:22:59 · 1888 阅读 · 1 评论 -
Android View绘制及事件(二)setContentView()源码,LayoutInflater加载View的过程
前言通常情况下,我们创建一个Activity时,会通过setContentView来引入布局,将界面视图展现给用户看见。那么,为什么通过setContentView()就能将xml格式的布局文件加载到界面中呢? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sa...原创 2019-01-24 18:24:36 · 1708 阅读 · 0 评论 -
Android View绘制及事件(一)屏幕的视图层级,窗口概念初识
系列推荐:Android View绘制及事件(二)setContentView()源码,LayoutInflater加载View的过程Android View绘制及事件(三)自定义View及View绘制流程Android View绘制及事件(四)自定义组合控件+约束布局ConstraintLayout+自定义控件属性Android View绘制及事件(五)View响应事件及分发过程...原创 2020-04-03 16:15:48 · 1840 阅读 · 0 评论