程序设计
文章平均质量分 87
锐湃
这个作者很懒,什么都没留下…
展开
-
以一种简单的方式来实现弹幕效果
弹幕的无限滚动:确保弹幕能够连续地滚动,而不是在到达末尾时重新开始。弹幕的多行显示:能够在屏幕上同时显示多行弹幕,并且每行弹幕独立滚动。滚动速度的控制:能够控制弹幕的滚动速度,以实现流畅的视觉效果。本文将通过一个示例项目来展示如何实现上述功能。gif图有点卡,可以自行运行一下看效果。通过本文的介绍,我们实现了一种简单的弹幕效果。使用和,不仅实现了多行弹幕的效果,还可以通过控制scrollBy方法的速度,实现弹幕的平滑滚动。这种方式非常适合在需要显示大量动态文本信息的场景中使用,例如商品评论等。转载 2024-09-20 13:46:57 · 143 阅读 · 0 评论 -
现代应用架构最佳实践
尽管架构模式可以有多种实现方式,但核心目标始终是实现高内聚和低耦合,从而提高代码的可读性、健壮性和可扩展性。在实际应用中,根据项目的具体需求和约束,灵活应用这些架构理念,才能构建出适合自身项目的最佳架构。作者:麦客奥德彪链接:https://juejin.cn/post/7377220397403865142来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-09-14 13:33:14 · 220 阅读 · 0 评论 -
经典实战之用Kotlin泛型实现键值对缓存
Kotlin 中的泛型是一种允许类型参数化的特性。它可以增强代码的重用性、类型安全性和可读性。在实际编写代码时,通过泛型,你可以编写更为通用的类和方法,而不必具体针对某种特定类型。转载 2024-09-11 10:16:22 · 76 阅读 · 0 评论 -
主流热更新方案盘点
差量的方式给出patch.dex,然后将patch.dex与应用的classes.dex合并成一个完整的dex,完整dex加载得到dexFile对象作为参数构建一个Element对象然后整体替换掉旧的dex-Elements数组。随着时代的发展,生活节奏的加快,人们对于互联网的需求日益加深,再加上IT技术的日新月异,导致应用的更新频率越来越快。Hook了ClassLoader.pathList.dexElements[],将补丁的dex插入到数组的最前端,所以会优先查找到修复的类,从而达到修复的效果。转载 2024-09-10 15:01:48 · 148 阅读 · 0 评论 -
动态权限申请 | 2次不允许权限导致申请权限不再弹框
shouldShowRequestPermissionRationale() 是 Android 系统中的一个 API,用于检查用户是否应该看到权限请求解释. 当您第一次请求一个危险权限时,系统会自动显示一个解释对话框,说明该权限的用途以及为什么您的应用需要它。14平台,录音应用需要申请麦克风权限,点击录音按钮时候会先检测是否有麦克风权限,如果有则直接开始录音,否则申请麦克风权限,当用户测试时候2次出现权限申请弹框都都选择不允许,第三次次就不再权限申请弹框。false: 表示用户不应该看到权限请求解释。转载 2024-09-06 20:07:52 · 135 阅读 · 0 评论 -
大厂 Android 可视化埋点实现
viewID是根据view的层级来确定的,如果项目进行重构或者变更层级,相同view的viewID就会变化,导致很多view要重新配置,有一种约束ID的方案,就是单独生成一个view与viewID的对应表,但是这样在添加新view时又要做相应的对应,也会带来开发上的不便利,所以目前还是维持现有的生成viewID的方案,当遇到重构或者层级变动的问题时就只能将上报的点迁移并重新生成viewID再上报,这是一个待优化的方向,后续想到合适的方案时会将其优化。然后在回调中做相应的操作,可以实现代码解藕。转载 2024-09-06 10:38:30 · 669 阅读 · 0 评论 -
企业级项目组件化重构之路
前面几篇文章我们讲解了一个云音乐app的基础库搭建,今天我们就来对这个app进行组件化代码重构组件化基础库封装系列文章Android组件化开发(一)--Maven私服的搭建Android组件化开发(二)--网络请求组件封装Android组件化开发(三)--图片加载组件封装Android组件化开发(四)--进程保活组件的封装Android组件化开发(五)--完整版音乐播放组件的封装Android组件化开发(六)-- 短视频播放组件封装Android组件化开发(七)--从零开始教你分析项目需求并实现项目地址。转载 2023-04-24 10:05:19 · 100 阅读 · 0 评论 -
Android面试又因为Handler机制而被淘汰了之聊聊同步屏障
在Android 官方开发者网站的参考手册中,有一段关于这个方法的说明,算是简单的介绍了一下同步屏障[1]LooperLooper大体意思就是:在View绘制时,会在Looper中使用同步屏障,来确保在view下一帧绘制完之前其他同步消息都暂不处理。这里重点看第三段,这段第一句话说的很清楚:异步消息不受同步屏障限制。得,看完这个,感觉更迷茫了。不过既然说了是在Looper中会用到同步屏障,那么就看看Looper中在哪里用到了。转载 2024-08-23 11:06:50 · 33 阅读 · 0 评论 -
扩展Result,让你的代码更简洁
在这篇文章中,我们介绍了如何扩展Result,来处理不同的结果分支,使我们的代码更加简洁。这种处理异常分支的方式叫做轨道编程(Railway Programming)。在 Github 中,也有很多用 Kotlin 实现轨道编程的项目,比如说,它内部自己定义了Result,而不是使用的 Kotlin 的Result,本文的很多例子就是根据这个项目来改造的,有兴趣的可以看看。转载 2024-08-19 16:17:14 · 36 阅读 · 0 评论 -
使用Kotlin Flow和协程开发高性能Android应用:以电影业务为例
Kotlin Flow和协程为Android开发者提供了一种高效处理异步任务和数据流的方式。通过合理使用这些工具,我们可以显著提升应用的性能和用户体验。在实际开发中,我们需要根据业务需求选择合适的策略和操作符,同时遵循最佳实践,避免常见的性能问题和内存泄漏。希望这篇文章能为你在Kotlin Flow和协程的使用上提供一些启示和帮助。未来,我们可以继续探索更多高级特性和优化策略,为用户提供更出色的应用体验。转载 2024-08-14 16:59:25 · 31 阅读 · 0 评论 -
LeakCanary 你真的了解么?看看这些高级用法
众所周知,Square 出品的内存泄漏检测工具 LeakCanary 可以很方便的检测出 App 中存在的内存泄漏问题。当我们决定要不要在项目中引入 LeakCanary 的时候,经常也会听到声音:• “LeakCanary 接入简单,无需手动初始化。• “LeakCanary 虽好,但就是太卡。• “LeakCanary 虽好,但无法线上使用。一度我也是这么认为的,直到我认真研究了下才发现,事实可能并没有那么简单。本文就是尝试从 LeakCanary 的一些高级用法,来重新论证上述的观点。转载 2024-08-13 10:49:38 · 159 阅读 · 0 评论 -
用final声明的局部变量,能提升性能吗
因为当方法执行结束时,方法内的参数和局部变量会跟着方法一起结束,都会被回收,而内部类的生命周期可能比方法长(例如:线程)。如果允许修改外部局部变量,而外部方法已经结束,变量可能已经被回收,这会导致数据不一致和不可预测的结果。由于匿名内部类可能会在不同的线程中被执行,如果允许修改外部局部变量,可能会引发线程安全问题。的局部变量编译后的 Class 文件都是一样的,因此访问效率都是一样的。,可以确保在匿名内部类中使用的变量值在其创建时就被固定下来,不会在后续发生变化。的局部变量通常不会直接带来显著的性能提升。转载 2024-08-13 10:01:23 · 25 阅读 · 0 评论 -
Android RecyclerView宫格拖拽效果实现
本篇到这里就结束了,我们利用RecyclerView实现了宫格图片的拖拽效果,主要是借助ItemTouchHelper实现,从ItemTouchHelper中我们能看到很多巧妙的的设计,里面有很多值得我们学习的技巧,特别是对事件的处理、绘制顺序调整的方式,如果做吸顶,未尝不是一种方案。另外,在本篇,我们还需要注意的是数据和UI一致性问题,因为在移动的过程中,数据的索引位置可能和UI产生差异需要主动优化,以及notifyItemMoved和notifyItemRemoved的用法。转载 2024-08-09 10:31:15 · 43 阅读 · 0 评论 -
hide api反射方案合集
这次梳理了常见Android9之后的反射hide api的方案,通过这次学习,梳理了场景的方案的方向和思路。一方面我们需要做到理解Android限制我们调用hide api的原理,在真正需要这个方案的时候更好的做出选择,另一方面,我们也应该认识到Google设置这个规则的目的,那就是不到万不得已的时候不要随意去反射hide api,以免给app带来稳定性和安全性的问题。• 《一种绕过Android P对非SDK接口限制的简单方法》• 《另一种绕过 Android P以上非公开API限制的办法》转载 2024-07-30 19:20:01 · 51 阅读 · 0 评论 -
Android hide api反射方案合集
这次梳理了常见Android9之后的反射hide api的方案,通过这次学习,梳理了场景的方案的方向和思路。一方面我们需要做到理解Android限制我们调用hide api的原理,在真正需要这个方案的时候更好的做出选择,另一方面,我们也应该认识到Google设置这个规则的目的,那就是不到万不得已的时候不要随意去反射hide api,以免给app带来稳定性和安全性的问题。• 《一种绕过Android P对非SDK接口限制的简单方法》• 《另一种绕过 Android P以上非公开API限制的办法》转载 2024-07-26 15:44:11 · 78 阅读 · 0 评论 -
2024年移动端技术探索
2023年号称AI元年,AI带来了一些不是很清晰的机会,没有看到有多好的落地,对于互联网,不止技术层面没有突破,业务层面的需求也断崖式下滑,没有创新就没有需求,老业务的修修补补也带不来多少需求。以音视频行业为例,业界很有影响力的LiveVideoStack也停止了商务活动,音视频大会也不再开了。一切都在朝着萎缩的方向发展。裁员已经不是什么新闻,不是不裁了,是大家习惯了。在移动端,甚至整个互联网还能折腾什么呢?大家早已不再以造轮子为乐了,因为现在缺的不是轮子,而是从头到尾的新车子。参加北京QCon的时候郭转载 2024-07-26 15:13:27 · 87 阅读 · 0 评论 -
大型项目架构:全动态插件化+模块化+Kotlin+协程+Flow+Retrofit+JetPack+MVVM+极限瘦身+极限启动优化+架构示例+全网唯一
这里采用难度系数最大的 6颗星难度来架构项目架构模式:采用自研全动态插件化框架进行插件化部署项目内部架构:采用 Kotlin 语言编写,架构选用 MVVM 代码架构模式,联合使用JetpackRoomLifecyleLiveDataViewModel,等项目网络封装:采用协程 +FlowRetrofitOkHttp项目图片加载:采用谷歌开源Glide图片加载框架项目音乐视频:采用谷歌开源Exoplayer框架进行视频播放,音乐播放项目数据库:使用官方Jetpack中组件Room数据库。转载 2024-07-25 10:28:23 · 107 阅读 · 0 评论 -
AGP 8.0 路由框架新思路
说到路由又是老生长谈了,阿里的ARouter、美团的WMRouter这些老牌知名度很高的路由框架。由于 AGP 8.0 以后不能支持,Github 上也有很多人提了PR,Issues 里边也有很多个开发了支持8.0 的插件。去年我为了支持 AGP 8.0 以及 KSP, 也写了一个路由框架LRouter。新框架难免会有很多问题,刚好公司有一个新项目要做,我自己在公司的项目中第一个接入的,踩了半年的坑,也基本上稳定了下来。在这里把遇到的一个很致命的编译问题分享一下解决的思路。转载 2024-07-17 16:55:35 · 182 阅读 · 0 评论 -
用Kotlin协程消灭安卓开发中的回调地狱
作为原生的安卓开发,我们苦异步编程久已,自从kotlin和协程被引入了原生安卓开发,我们终于找到了优雅的异步编程写法,再也不用眼馋Javascript的async/await了。用Kotlin协程消灭安卓开发中的回调地狱。转载 2024-06-12 19:44:25 · 120 阅读 · 0 评论 -
美团Robust热修复方案实现原理浅析
1.兼容性好:Robust采用Instant Run插桩的方案。2.实时生效,且修复率高。3.UI问题也可以通过动态添加和移除View等方式解决。转载 2024-06-12 19:34:54 · 177 阅读 · 0 评论 -
异步编程:Coroutine与RxJava的差异及实例分析
Coroutine是Kotlin标准库的一部分,旨在提供一种轻量级且易用的方式来编写异步代码。与传统的回调方法相比,Coroutine允许开发者以顺序风格编写异步代码,使代码更易读、更易维护。RxJava是一个响应式编程库,允许开发者通过操作符组合异步和事件驱动的程序。它提供了一组强大的操作符,用于处理异步数据流,使得数据处理变得更加灵活和强大。转载 2024-06-12 16:41:09 · 39 阅读 · 0 评论 -
聊聊陈旧的插件化: 类加载 &资源加载
之前写过一篇给自己填了坑,聊聊陈旧的插件化,还有小伙伴催更,连夜干了一篇。话不多说开始。先大概了解下整个Apk的构成。AndroidManifest.xml:用于描述APK包的组件和权限信息。classes.dex:这是一个包含Java字节码文件的文件。resources.arsc:会把资源打包编译成该格式,被为每份资源分配一个ID。。lib 目录:这个目录中包含了应用程序的所有本地代码库文件。(so文件)assets 目录:文件和资源,该目录下文件不会分配资源ID。转载 2024-06-06 16:18:54 · 52 阅读 · 0 评论 -
项目到底要不要引入单元测试
有些同学看到这里紧张了,以为我要开始搬定义了。然而并非如此,接下来我要分享的所有都是我自己的心路历程,也是我自己对单元测试从完全不 care 到至少入门的过程。所谓“单元测试”,顾名思义就是对软件的一个个最小单元进行模块化测试。在《给安卓开发小白们的unit test指南 - 这也能测?这也要测?这篇文章里,阿庆哥给出了一张软件工程金字塔结构图,可以清楚看到单元测试直接位于这座金字塔的最底层!常言道万丈高楼平地起,可见如果单元测试做得很稳健的话,对于整个软件项目的稳健性一定是收益最大的。转载 2024-05-09 11:00:43 · 50 阅读 · 0 评论 -
技术能力重要还是业务能力重要
如果你是业务团队,为了应付工作,你应该多搞点业务。富有余力,那可以考虑补一补短板,提升一下技术水平,以免将来团队、公司发生变化,自己应付不来。如果你在技术团队就反过来理解,当下已经游刃有余了,就弥补短板,当下捉襟见肘,还是应该追求效率。,如果你当前技术强就多钻研钻研业务,想想怎么把技术应用起来带动业务发展,给公司、团队和个人创造价值。如果你现在技术很烂,只能应付简单的业务需求,稍微复杂一点的问题就搞不定,那显然应该多研究研究技术,给自己加点本事。,如果你打算接下来去往更好的平台,那么还是应该多搞搞技术。转载 2024-04-30 18:05:08 · 53 阅读 · 0 评论 -
现在去开发一款App需要投入多少资金?
本文主要探讨跨平台应用的开发成本,原生与小程序不在探讨范围之内,为什么呢?请接着往下看~转载 2024-04-24 19:07:25 · 108 阅读 · 0 评论 -
优雅的处理首页弹框逻辑:责任链模式
(使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。) 责任链模式的重点是在“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请 求,并返回相应的结果,其通用类图如图所示//请求的等级//请求级别//处理者返回的数据//抽象处理者//每个处理者都必须对请求做出处理//是自己处理的级别,自己处理} else {//不是自己处理的级别,交给下一个处理者= null) {转载 2024-03-28 17:42:48 · 121 阅读 · 0 评论 -
如何开发一个浏览器插件
前几天,看到了郭神讲述了关于自己如何让Android版本Edge浏览器支持插件的文章,深受震感。当时我在想那该如何开发一个浏览器插件呢?这是我的盲区,因此便有了这篇文章。转载 2024-03-27 16:48:13 · 92 阅读 · 0 评论 -
Android自定义控件之自定义组合控件
前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一)、自定义属性Android自定义控件之自定义属性(二)。今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发成本,以及维护成本。Android自定义控件之基本原理Android自定义控件之自定义属性Android自定义控件之自定义组合控件Android自定义控件之自定义ViewGroup实现标签云。转载 2024-03-26 20:16:02 · 38 阅读 · 0 评论 -
自定义View学习——三种实现方式
由此学习是一个我认为比较愉快的学习方向。首先说说自定义View的种类,分为三种:转载 2024-03-26 20:10:01 · 68 阅读 · 0 评论 -
FlorisBoard:Android开源键盘的现代化选择
FlorisBoard是一款免费且开源的安卓键盘,适用于Android 7.0及以上版本的设备。它的现代化设计和用户友好的界面使其在众多键盘应用中脱颖而出。FlorisBoard的独特之处在于它注重用户体验的同时,也高度尊重用户的隐私。总之,FlorisBoard作为一款免费且开源的安卓键盘应用,通过其现代化的设计、高度的定制化能力和对用户隐私的尊重,成为了用户在安卓平台上的首选。无论是个人用户还是企业用户,FlorisBoard都为他们提供了出色的键盘体验和保护隐私的安全性。转载 2024-03-21 15:13:30 · 103 阅读 · 0 评论 -
Android项目开发模板开源与相关介绍
其实我们优化项目架构的真实目的是为了细致化的逻辑分层,还需要顾及到多个员工协作的开发效率,还要兼顾应用产品的多变性,不是炫技,不是为了分层而分层,最终目的还是单一职责,高内聚低耦合的思想。转载 2024-03-19 10:42:20 · 224 阅读 · 0 评论 -
自定义ViewGroup扩展,基于事件伪造实现事件录制与回放
在之前的文章中我们复(学)习了 ViewGroup 的事件、滚动、惯性、多手指等操作。今天我们复(学)习一下事件的传递与伪造。之前在群里遇到有这样一种需求,我们需要把一段时间内的用户操作记录下来,并且可以回放操作。例如用户点击按钮或滑动,一旦出现闪退或其他问题,监控平台就可以通过用户的操作在云端或本地复现用户的操作,结合埋点与崩溃信息能更好的发现代码与逻辑漏洞并进行修复。通过录制的按钮与图标、滚动的坐标等信息再结合当前的设备进行对应的适配并回放。转载 2024-03-15 11:26:26 · 35 阅读 · 0 评论 -
程序员除三害
作为程序员,我们常常陷入一些让人心烦意乱的陷阱,这些陷阱有时会影响我们的工作效率、生活品质甚至健康状态。。转载 2024-03-13 10:00:37 · 48 阅读 · 0 评论 -
DeepLink入门指南
以上内容是我针对移动端 Deeplink 方案的总结,针对 Deferred deeplink,自己并未经过完整技术方案的实践,如有不足,欢迎指出!作者:九心链接:https://juejin.cn/post/7341720847880798235来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-03-08 10:41:48 · 678 阅读 · 0 评论 -
Android车载开发之AAOS快速入门
在正式介绍Android Automotive OS之前,我们先弄清两个概念:Android Auto和Android Automotive OS。转载 2024-03-05 11:19:18 · 2083 阅读 · 0 评论 -
Linux 网络编程学习笔记——一、TCP/IP 协议族
网络层实现数据包的选路和转发,WAN(Wide Area Network,广域网)通常使用众多分级的路由器来连接分散的主机或 LAN(Local Area Network,局域网),因此通信的两台主机一般不是直接相连的,而是通过多个中间节点(路由器)连接的。网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(以太网、令牌环等)上的传输,不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供一个统一的接口。转载 2024-02-29 13:44:05 · 78 阅读 · 0 评论 -
开发一款 SDK 需要注意哪些问题
上面这类错误相信遇到的应该不少,Java 有一套自己的 JDK 判断准则,Kotlin 也有,Kotlin metadata 的版本来自 KGP 版本,也即意味着,当你的 SDK 使用高版本的 KGP 编译时,业务方要么编译不过,要么被迫升级 KGP 版本,这会使业务方因为升级 Kotlin 而带来其他业务的不稳定性。SDK 提供抽象接口,业务方依赖接口调用,这么做的好处是,业务方面向接口调用使用简单,还能避免使用不稳定的内部实现,并且,内部实现可以进行混淆。转载 2024-02-20 11:24:19 · 949 阅读 · 0 评论 -
为什么稳定的大公司不向Flutter迁移
根据我的观察, 对于一家以产品为基础的公司来说, 决定将自己多年的移动开发技术栈转换为新的技术栈是非常困难的. 因此, 如果大公司真的决定转换, 这个决定本身确实值得称赞, 勇气可嘉, 也很有激励作用.如果业务非常重要(如 Talabat, Foodpanda, 或涉及日常大量使用, 支付, 安全, 多供应商系统等的用户关键型应用程序), 那么从业务角度来看, 最理想的做法是以混合方式慢慢迁移应用程序. 同样, 这也不一定对所有人都可行, 重写可能更好. 这完全取决于公司和业务的结构以及决策的力度.转载 2024-02-19 10:59:48 · 135 阅读 · 0 评论 -
AMS 完全剖析1 —— Activity 管理之任务与返回栈
在 Android 中,一个具体的事情可以被看作是一个任务(Task),比如:打开微信支付二维码付款打开抖音刷短视频打开拼多多网购一个 Task 又可以被细分成多个子步骤,每个子步骤就是一个 Activity。这个 Activity 既可以是当前 App 中的 Activity,也可以是其他 App 中的的 Activity。转载 2024-02-07 14:05:48 · 142 阅读 · 0 评论 -
大公司如何做 APP:背后的开发流程和技术
所谓他山之石,可以攻玉。在这篇文章中,我只是选取了几个自己印象深刻的技术点,零零碎碎地写了很多,比较散。对于有这方面需求的人,会有借鉴意义。转载 2024-01-30 11:11:29 · 173 阅读 · 0 评论