![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构
文章平均质量分 90
普通网友
这个作者很懒,什么都没留下…
展开
-
Android JNI静态和动态注入方法
……原创 2023-11-14 15:19:24 · 314 阅读 · 0 评论 -
猫耳 Android 播放框架开发实践
猫耳FM是中国最大的 95 后声音内容分享平台,是B站重要平台之一,深度合作国内顶级声优工作室,打造了数百部精品广播剧,全站播放总量超过百亿次。MEPlayer 是猫耳 Android 技术团队研发的一款适用于音视频、直播、特效播放等多种场景的跨进程播放框架。音视频、直播、特效播放。支持自定义播放内核,目前内置了 exo、bbp(多媒体部门开发的轻量级播放内核),都添加了边下边播支持,可以自行扩展支持 ijk 等内核,实现固定的几个接口即可。与业务完全解耦,已在公司内多个团队使用。原创 2023-11-01 15:00:48 · 459 阅读 · 0 评论 -
掌握Android自定义View与独家优化技巧
自定义View是Android开发中的重要概念,允许你创建不同于标准UI组件的用户界面元素。这些自定义View可以是各种形状、颜色和交互方式,完全满足你的设计需求。创造性和定制性:自定义View允许你创建完全独特的用户界面元素,无限扩展Android原生UI组件的功能和外观。灵活性:自定义View可以满足各种复杂的设计需求,从简单的动画效果到高度定制的绘图应用。可重用性:一旦创建自定义View,它可以在应用中多次重复使用,提高代码的可维护性和可重用性。分离关注点。原创 2023-10-31 15:40:25 · 99 阅读 · 0 评论 -
多 Activity 多 Page 的 UI 架构
世上没有最好的架构,只有最适合自己的。UI往往是变动最频繁的业务,所以了解各个组件的优缺点,根据业务逻辑去选用最适合的,才是高效开发的捷径。不管怎样,都是有无数坑点的,趋利避害才是UI的归宿。UI最好的经验就是知道各个组件有什么坑点,如何避开。不然随便一个坑,就够开发加好一会儿班了。原创 2023-10-26 15:33:45 · 907 阅读 · 0 评论 -
分析并实现Android中的MVC、MVP架构模式
MVC的话它本来不属于Android的架构模式,而是来自于web前端。在Android发展的前期照搬了前端这一套模式。MVC模式就是Model、View和Controller。View的职责就是处理显示相关的逻辑以及接收用户行为。再把用户行为转发到Controller,Controller再根据请求去更新或者是获取Model层的数据。Controller更像是一个中转站或者是调度站。Model 负责管理数据、执行业务逻辑。MVC在前端的作用是为了分离数据和视图这两层,但是在Android上面它就不灵光了。原创 2023-10-19 13:00:00 · 505 阅读 · 0 评论 -
从简单到复杂,MVI 架构定义与封装使用总结
时间回到一年多前讨论度很高的 MVI 架构,现在也已尘埃落地,没有什么争议并各自都有自己的一套实现方案了,接下来我们就看看这些网上各种各样的 MVI 架构是如何从简单到复杂,从 Java 到 Kotlin 到协程再到 Compose 的各个场景的应用。首先你能点进来看到这篇文章,说明你或多或少都对 MVI 架构有些了解,我这里就不贴一些重复的图去解释 MVI 架构原理流程什么的了。原创 2023-10-16 13:00:00 · 518 阅读 · 0 评论 -
如何在10分钟内让Android应用大小减少 60%?
一个APP的包之所以大,主要包括一下文件瘦身就主要瘦这些。原创 2023-10-09 23:57:01 · 132 阅读 · 0 评论 -
Android如何实现轮播效果:ViewFlipper 和 ViewAnimator
现在的app中基本上都有轮播的需求,比如广告banner、最新消息tips等等。其中我们熟悉的顶部广告一般左右轮播,这种情况大部分通过ViewPager实现。而那种上下轮播的消息tips(一般是条状)则可以使用ViewFlipper实现。说到ViewFlipper,就不得不先说ViewAnimator,它是ViewFlipper的父类,ViewFlipper的功能就是在它基础上扩展出来的。原创 2023-09-21 15:19:33 · 561 阅读 · 0 评论 -
腾讯数据持久化方案MMKV原理分析
因此针对这种缺陷,我们往往会换其他的技术方案,例如不能跨进程存取数据,那么就使用SQLite做数据存储,通过Provider对外提供数据,但是这种方案依然存在响应速度慢的问题,很有可能出现ANR,即便是放在了子线程中存取数据,但是依然会存在同步问题,直到MMKV的出现,好像一下就解决了上述的两个问题。那么在文章开篇,我们通过一个小的demo验证一下SharedPreference和MMKV存储数据效率,看具体的效果如何。原创 2023-09-18 17:02:17 · 166 阅读 · 0 评论 -
App 出海实践:Google Play 结算系统
在 Google Play Console 手动创建通过 Google Play Developer API 以代码的方式创建在 Google Play 中创建的商品都属于虚拟商品,每个商品代表的都是 App 给用户提供的一种权益,而每个商品都包含一个唯一标识,也即 ProductId,我们在业务上就需要根据 ProductId 的命名规则来定义商品所代表的具体权益类型一次性商品。用户通过单次付费获得的商品,属于买断制,对应 Google Play 结算库中的订阅型商品。原创 2023-09-08 14:55:29 · 1042 阅读 · 0 评论 -
Kotlin+MVVM 构建todo App 应用
使用Kotlin+MVVM实现的todo app,功能界面参考微软的Todo软件(只实现了核心功能,部分功能未实现)。项目模块:添加/删除项目,项目负责管理todo任务任务模块:添加/删除任务,标记任务完成情况,标记任务为重要,标记为我的一天,设置提醒时间(发送前台通知),设置过期时间。搜索模块:依据任务名称模糊搜索。这是本人在学完Android后搞得第一个练手项目,其中很多编码方式不一定规范,有些功能也未实现(如帐号管理,任务云同步,项目可移动,任务可重新分组,任务可细分步骤等功能)。原创 2023-09-07 14:03:12 · 542 阅读 · 1 评论 -
高效复用:RecyclerView内部嵌套横向列表时的优化技巧
对于内部某个ItemView直接创建多个固定的子View:这种方式不够灵活扩展性差,且在动态创建子View时就无能为力了;通过ViewGroup方式动态的创建各个子View:这种方式本身不能缓存子View,所以每次上下滑动时都会重新创建子View,虽然能实现我们想要的效果,但是性能并不是最优的;通过RecyclerView创建内部列表并使用 DiffUtil 进行数据对比和更新操作:数据变化时更新,否则什么都不做。这样做可以最大限度地利用的复用机制和缓存优势,在数据变化时进行精准刷新并提高整体渲染效率。原创 2023-09-06 14:11:02 · 237 阅读 · 0 评论 -
RecyclerView回收复用分析
由此,我们大致知晓了各阶段的意义和作用,且状态标记用于阶段流转的处理(需注意measure阶段也是会调用的喔)原创 2023-08-31 14:22:10 · 248 阅读 · 0 评论 -
身处寒冬,该怎么去卷?APM必须了解一下
本文主要介绍了APM的一些基础概念,让不熟悉APM的同学有个简单了解。需要绩效的同学们,可以优先考虑APM,开始卷起来啦!原创 2023-08-16 14:18:40 · 102 阅读 · 0 评论 -
深入理解与运用Android Jetpack ViewModel
ViewModel是Android Jetpack组件之一,它的主要目的是将UI控制器(如Activity和Fragment)与数据相关的业务逻辑分开,使得UI控制器能够专注于展示数据和响应用户交互,而数据的获取和处理则交由ViewModel来管理。这种分离能够使代码更加清晰、易于测试和维护。原创 2023-08-12 20:47:59 · 1150 阅读 · 0 评论 -
Shadow插件化框架使用
……原创 2023-08-07 14:44:55 · 543 阅读 · 0 评论 -
Robust热修复方案实现原理浅析
1.兼容性好:Robust采用Instant Run插桩的方案。2.实时生效,且修复率高。3.UI问题也可以通过动态添加和移除View等方式解决。原创 2023-08-01 14:18:49 · 317 阅读 · 0 评论 -
理解Android中不同的Context
Context是Android应用程序与系统环境进行交互的桥梁,主要实现类是ContextImpl,,不同是Context的主要实现类,是简单的包装类,所有的实现都由其内部的mBase成员完成,ContextThemeWrapper继承自,它的主要继承者是Activity,和其他两个Context不同的是,他内部对应用资源和主题有不同的行为,在应用中使用跟主题相关的Context时,最好使用activity,而不要使用或者。原创 2023-07-26 14:22:31 · 834 阅读 · 0 评论 -
一个神奇的框架——Skins换肤框架
……原创 2023-07-25 14:49:51 · 317 阅读 · 0 评论 -
移动端APP组件化架构实践
对于中大型移动端APP开发来讲,组件化是一种常用的项目架构方式。个人最近几年在工作项目中也一直使用组件化的方式来开发,在这过程中也积累了一些经验和思考。主要是来自在日常开发中使用组件化开发遇到的问题以及和其他开发同学的交流探讨。为什么需要组件化组件化过程中会遇到的挑战和选择如何维护一个高质量的组件化项目提示:本文说的组件化工程是指Multirepo使用独立的git仓库来管理组件。原创 2023-07-24 14:57:00 · 181 阅读 · 0 评论 -
解決JetpackCompose 编译通过但是运行报错的问题
……原创 2023-07-22 21:14:23 · 239 阅读 · 0 评论 -
100行代码搭建一个IO泄露监测框架
其实,如果了解过matrix-io-canary源码的人,应该很快就可以发现,这不就是matrix-io-canary中io泄漏监测的实现源码吗!笔者只是在通读了matrix-io-canary之后,通过整理涉及到的相关知识点,以一种更加通俗的方式进行了讲解,希望本篇文章能对你有所帮助。不过请注意,以上CloseGuard是基于Android12的源码进行的分析,不同的系统版本比如Android8实现是不同的;而且涉及到系统非公开api的访问也是借助了。原创 2023-07-20 14:16:09 · 92 阅读 · 0 评论 -
不懂Android View 事件派发流程的看过了~
像长按的时长,滑动的最小距离,拉伸的最小距离等 等 这些关键的阈值都 是有系统建议的定义的,这些值都在 ViewConfiguration 里面,通常建议直接使用系统定义的要好一些,除非真有特殊需要。原创 2023-07-04 14:46:38 · 153 阅读 · 0 评论 -
安卓热修系列-插件资源冲突解决方案
插件源码工程中的插件apk结构(也就是plugin.apk):实际代码下沉为resmodule作为library模块,app模块中并无实际功能,仅仅作为application模块引用library,这样就可以输出我们的插件plugin.apk。这样做的目的上面有说,其实就是避免我们的代码等在app模块,被弄成常量了。本文介绍了插件资源加载的多种方案,可以按照自己的使用场景以及团队技术能力选择合适的方案。原创 2023-06-30 14:21:28 · 379 阅读 · 0 评论 -
现代化 Android 开发:组件化与模块化的抉择
再复杂的东西,也是由一个个的零件慢慢组装起来的。我们要有蓝图,然后为实现这个蓝图而拧螺丝。拧得多了,也许就有机会拧更大的螺丝。我在 emo 组件库上拧了 20 个螺丝,拧得多了,也算是一个不小的库了。不过目前我源码已经转 private 了,后面拧的螺丝,只想留给小团体孤芳自赏了。用行动证明一下,国内的开发者的开源库是多么的不稳定。原创 2023-06-27 13:54:01 · 399 阅读 · 0 评论 -
【开源库剖析】Shadow v2.3.0 源码解析
Shadow是19年腾讯开源的自研Android插件化框架,经过线上亿级用户量检验。Shadow不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。优点1)复用独立安装app源码。2)少反射、0hook。侵入性低,系统兼容性好;3)全动态框架设计(runtime的动态化有1处hook)。框架本身迭代也支持动态化,宿主增量极小(15K左右);4)插件支持运行在独立进程。与宿主运行环境隔离,稳定性高。缺点1)接入成本高。没有完善的接入文档,demo也过于复杂;原创 2023-06-26 14:47:02 · 985 阅读 · 0 评论 -
Android 组件化架构思路
项目模块化需要对项目总体进行把控,业务的划分,功能模块的抽取,以及合适的架构方案跟技术选型,这都需要花费很多精力,任重而道远。但是很多开发者以前根本就没有接触过组件化开发,对其中的技巧和用法不是很了解,考虑到这些问题,在这特别准备了帮助大家去熟知该功能的应用。原创 2023-06-25 21:43:07 · 712 阅读 · 0 评论 -
RecyclerView 低耦合单选、多选模块实现
需求很简单也很常见,比如有一个数据列表RecyclerView,需要用户去点击选择一个或多个数据。实现单选的时候往往简单下标记录了事,实现多选的时候就稍微复杂去处理集合和选中。随着项目选中需求增多,不同的地方有了不同的实现,难以维护。因此本文设计和实现了简单的选择模块去解决此类需求。不需要改动AdapterViewHolderItem,低耦合单选,可监听选择变化,手动设置选择位置,支持配置再次点击取消选择多选,支持全选,反选等支持数据变化后记录原选择本文实现了在。原创 2023-06-21 13:53:46 · 641 阅读 · 0 评论 -
移动端APP组件化架构实践
对于中大型移动端APP开发来讲,组件化是一种常用的项目架构方式。个人最近几年在工作项目中也一直使用组件化的方式来开发,在这过程中也积累了一些经验和思考。主要是来自在日常开发中使用组件化开发遇到的问题以及和其他开发同学的交流探讨。为什么需要组件化组件化过程中会遇到的挑战和选择如何维护一个高质量的组件化项目提示:本文说的组件化工程是指Multirepo使用独立的git仓库来管理组件。原创 2023-06-09 15:26:58 · 857 阅读 · 0 评论 -
Android“真正的”模块化
如果说SOLID原则告诉我们如何将砖块排列成墙和房间, 那么组件原则则告诉我们如何将房间排列成建筑.” ~ Robert C. Martin, Clean Architecture你应该分层打包还是分特性打包?还有其他方法吗?如何提高项目的编译时间?你的工程师如何在跨职能的团队中独立工作?目录组件内聚原则组件耦合原则封装设计解决方案封装主组件SOLID原则可以验证和检测类或接口的代码缺陷, 而组件原则可以验证和检测组件的代码缺陷.什么是组件?原创 2023-05-07 21:30:27 · 576 阅读 · 0 评论 -
Recyclerview源码深入探索:Adapter的增删改再也不迷路
三级缓存,有的地方说是四级缓存,请你不要迷惑,到底是三还是四,这就像图片加载这个场景有人说是三级缓存有人说是二级缓存,说三级缓存是把通过网络请求图片这个环节也认为是一层缓存,你认为这个环节应该不应该属于缓存呢?所以到底是三还是四不重要,因为逻辑是固定的.其实如果要比较和ScrollView这两个哪个控件使用起来更简单,那必然是ScrollView,而且上手难度完全不是一个量级的.那为什么ScrollView的出镜率完全比不上呢?这就要归功于缓存设计和他的可扩展性了.原创 2023-04-24 14:59:57 · 637 阅读 · 0 评论 -
RecyclerView 滑动布局源码分析:带你深入掌握列表滑动机制
现在RV已经初始化好了,那当我们进行滑动交互时代码又是如何执行的呢?RV优秀就优秀在他是动态布局的,与ScrollViewScrollView是初始化时将所有child都inflate并add而RV是只inflate屏幕展示得下的child.ScrollViewinflateaddScrollViewRVinflateinflateaddremoveRV再强大,他终究还是View,那他也逃离不了android触摸事件传递的限制,所以如果RV想要响应滑动事件,那一切的开始必然在中.原创 2023-04-23 14:38:36 · 707 阅读 · 0 评论 -
RecyclerView 静态布局实现过程解析:如何构建高性能的列表
Recyclerview在日常开发中所使用的控件中绝对是顶流一般的存在,想嚼它这个想法一次两次了。在网上也看了很多关于Recyclerview源码解析的文章,大佬们写的都很深刻,但是对于像我们这种储备知识不足的小白读者来说,那感觉就像外地人坐上了黑车,你说咋走就咋走。原创 2023-04-22 21:03:37 · 632 阅读 · 0 评论 -
插件化换肤原理—— 布局加载过程、View创建流程、Resources 浅析
本篇主要分享了布局加载流程(好像跟换肤没啥关系)、View 创建过程(重点)、Resources 简单分析(重点)。原创 2023-04-17 14:58:12 · 253 阅读 · 0 评论 -
Android 应用架构指南 -- 三种架构模式简介(MVC、MVP、MVVM)
遵循摩尔定律,手机终端随着每年的更新换代,其性能也飞速增长。依附于此的 Android 应用规模也愈发复杂。截止 2023 年 4 月,最新版本 8.0.32 微信 apk 大小为 238MB,而对比 2011 年微信 1.0 版本 apk 包大小仅为 457KB,短短 12 年增长了533倍。随着应用规模增大,功能扩展困难、测试规模大及并行开发难等问题愈发突出。为了从根本上解决这些问题,就需要对应用进行重构,此时应用架构设计就显得尤为重要。程序代码和资源越来越多,代码耦合度高,扩展、维护及测试困难。原创 2023-04-14 14:53:24 · 235 阅读 · 0 评论 -
Android面试官:“你的懂View绘制吗?”
迎面走来的一位中年男子,他一手拿着保温杯,一手抱着笔记本电脑,顶着惺忪的睡眼,不紧不慢地走着,不多的几根头发在他头顶自由飞翔。过了一会,他面对着我坐下,放下电脑和保温杯,边揉眉头边对我说View 的绘制流程应该是每个初高级 Android 攻城狮必知必会的东西,也是面试必考的内容,每个人都有不同的回答方式。简单点譬如 measure,layout,draw 分别对应测量,布局,绘制三个过程,高明一点的会引申出 Handler,同步屏障,View 的事件传递,甚至 activity 的启动过程。掌握哪些东西,原创 2022-06-17 21:02:26 · 116 阅读 · 0 评论 -
“终于懂了~”系列:Android插件化
插件化技术最初源于免安装运行 的想法,这个免安装的 就可以理解为插件,而支持插件的 我们一般叫 宿主。想必大家都知道,在 系统中,应用是以 的形式存在的,应用都需要安装才能使用。但实际上 系统安装应用的方式相当简单,其实就是把应用 拷贝到系统不同的目录下、然后把 解压出来而已。常见的应用安装目录有:那可能大家会想问,既然安装这个过程如此简单, 是怎么运行应用中的代码的呢,我们先看 的构成,一个常见的 会包含如下几个部分:其实 系统在打开应用之后,也只是开辟进程,然后使用 加载 至进程原创 2022-06-16 16:49:59 · 961 阅读 · 0 评论 -
什么是Android组件化,为什么要组件化?
组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向。每个大厂内部的各个Android开发团队也在尝试和实践不同的组件化方案,并且在组件化通信框架上也有很多高质量的产出。本文主要介绍我们的组件化方案,希望对从事Android组件化开发的朋友能有所启发。近年来,为什么这么多团队要进行组件化实践呢?组件化究竟能给我们的工程、代码带来什么好处?我们认为组件化能够带来两个最大的好处:1.提高组件复用性可能有些人会觉得,提高复用性很简单,直接把需要复用的代码做成Android Mod原创 2022-06-13 16:04:12 · 1545 阅读 · 0 评论 -
Android热修复,插件化理论与实战
本文现实讨论一下Java虚拟机的理解 以及 类Java加载过程,引申出热修复与插件化实现的核心点,类加载技术,分析思路之后使用ClassLoader+反射实现了基本效果在编程的上古年代,程序员直接面对硬件编程,机器计算机只认识0和1,不同硬件的指令都是不同的,所以代码完全不能复用。在Java诞生之初 有一个非常著名的口号 “一次编写,到处运行” ,它是如何实现的呢?人类编写的高级语言Java如何转化为机器认识的01呢我理解的答案是:分层最初的层次:代码—机器Java出现之后的层次:Java—Java虚拟机—原创 2022-06-08 13:52:37 · 402 阅读 · 0 评论 -
一看就会 Android开发架构中[三化]的演变与示例
作者:newki转载地址:https://juejin.cn/post/7098915987311263781对于整个Android开发来说,整体的开发架构离不开三化这个名词:模块化,组件化,插件化。下面一起来看看它们是如何一步一步演变成今天的模样。一. 模块化软件开发不管是哪一个方向,大家都知道高内聚,低耦合的思想。模块化也是每一门语言,各个方向的开发者都会处理的问题。在Android开发方向来说,模块化就是把常用的UI,网络请求,DB操作,第三方服务等公共的部分抽取封装成模块,方便复用。.原创 2022-05-31 14:13:42 · 237 阅读 · 1 评论