架构
文章平均质量分 93
塞尔维亚大叔
毕业于上海复旦大学,专注技术多年,产品控、代码控,拥有丰富的项目经验,参与主持研发了多个成功上线的大型互联网项目。
展开
-
2022 Android 官方现代应用架构解读 - Data Layer
作者:madroid概述📌 名词解释DataSource:数据源类,是 App 中业务逻辑与系统 API 和三方 SDK 的桥接类。Repository:数据仓库类,其使用 DataSource 处理业务逻辑,并将数据提供给上层调用者的类。Data Layer 主要做了下面两件事情:通过 DataSource 封装系统及三方 API;通过 Repository 使用 DataSource 封装业务逻辑,并暴露给使用者;因此,Data Layer 主要也是由 DataSource .转载 2022-04-24 15:03:04 · 487 阅读 · 0 评论 -
吹爆系列:Android 插桩之美,全面掌握~
作者:阿明的小蝴蝶插桩插桩是什么?你在开发中有用过插桩的技术吗?所谓的插桩就是在代码编译期间修改已有的代码或者生成新代码。插桩具体在编译的哪个流程介入呢?插桩的作用与场景代码生成代码监控代码修改代码分析Java 源文件方式类似 AndroidAnnotation/APT(Annotation Processing Tool),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代码输入。 这些代码生成的场景,它们生成的都是 Java 文件,是在编译的最开始介入.转载 2022-04-21 15:07:21 · 2457 阅读 · 0 评论 -
默认状态下,ViewGroup为什么不走onDraw()?
一、起因遇到这个问题是在一次自定义ViewGroup中重写了onDraw()方法,并且在onDraw中绘制了画面,但是运行过后,画面没有效果。随后自己写了一个简单的Demo,打出日志看了一下绘制流程,如下:从上面的图片可以清楚的发现在绘制时,只是走了onMeasure,onLayout和dispatchDraw,onDraw方法却没有调用。随后借鉴了网上的说法,在自定义ViewGroup的xml中设置了一个背景颜色,并运行打印log这个时候就可以看见在dispatchDraw之前调用了onDra原创 2021-09-09 15:15:27 · 343 阅读 · 3 评论 -
Jetpack的MVVM通信 - LiveData的原理分析
概述在上一篇文章中,我们介绍了 ViewModel的基本使用及原理分析。因为 ViewModel通常还需要结合组件间通信工具一起使用,所以上次文章也是讲了 ViewModel + LiveData结合使用的场景。这次会结合上篇文章的例子来分析 LiveData的一些原理。上一篇:Jetpack的MVVM实现 - ViewModel的使用及源码分析mp.weixin.qq.com/s?__biz=Mzk0ODAyNjE3Nw==&mid=2247484048&idx=1&sn原创 2021-09-06 21:26:49 · 278 阅读 · 2 评论 -
Jetpack的MVVM实现 - ViewModel的使用及源码分析
概述这篇我们继续讲 Jetpack,具体讲实现 MVVM架构的 ViewModel。这次的例子会将 ViewModel和 LiveData结合使用,然后分析一下 ViewModel的源码。LiveData将留到下篇文章分析。上一篇文章MVP基础架构搭建 的例子里,用了MVP的架构实现了网络加载的流程。这次我们要把上次 MVP架构升级为 这次的MVVM,将上次例子的 Presenter模块和 Model模块去掉,只保留网络加载引擎。然后结合 ViewModel和 LiveData来实现 MVVM。1、.原创 2021-09-03 16:30:32 · 277 阅读 · 2 评论 -
「性能优化系列」APP内存优化理论与实践
当一个应用同时运行越来越多的任务以及复杂的业务,Android系统的内存管理机制已经无法满足内存的释放与回收,为了应用的稳定性与性能,去控制内存的创建和回收就成为了一个重要的命题。本篇文章主要涉及内容如下:对象的创建与回收;分配内存的方式,对象在JVM中的生命周期;判断对象是否需要被回收,垃圾回收算法;内存抖动、内存泄漏的监控;Bitmap的大小、重复监控方案;设备分级方案。一、对象的创建和回收1.1、对象的创建在java中对象的创建基本上就是一个new,但new的背后在内存中做了些原创 2021-09-02 21:17:04 · 704 阅读 · 4 评论 -
字节面试题: Kotlin 中处理生产者/消费者问题的 N 种方式?
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个缓冲区(Buffer),生产者往 Buffer 中添加产品,消费者从 Buffer 中取走产品,当 Buffer 为空时,消费者阻塞,当 Buffer 满时,生产者阻塞。Kotlin 中有多种方法可以实现多线程的生产/消费模型(大多也适用于Java)Synchronized ReentrantLock BlockingQueue Semaphore PipedXXXStream RxJava Coroutin原创 2021-08-29 22:19:40 · 2936 阅读 · 6 评论 -
Android开发者重读设计模式:写个上传解耦库练练手
上周总算是把设计模式之美看完了,一直想写个东西练练手,碰巧最近要重构公司的上传库,所以有了这篇文章。(仅仅是学习练手,有建议可以提,架构大佬轻喷)0x1、杂谈① 为什么要重构上传库?我司APP在上传图片/视频前,需要进行一系列处理,最后才上传,如:图片:判断路径是否存在 → 通过Exif信息判断是否需要旋转 → 判断是否需要压缩 → 获取MD5 → 如果开启秒传查询是否有秒传记录,有直接返回 → 没有才上传 → 上传完成对应状态更新; 视频:判断路径是否存在 → 判断是否需要压缩 → 要压原创 2021-08-27 13:54:13 · 273 阅读 · 1 评论 -
Jetpack Compose 自定义绘制
概述Jetpack Compose 作为一款 UI 框架,自定义绘制部分是必不可少的。通过官方所提供的基础 API, 允许开发者实现各种场景下的绘制定制需求。如果你对 Android 原生 Canvas 已经了如指掌的话,那么迁移至 Jetpack Compose 基本没有任何成本。即使你不曾了解 Android 原生 Canvas 也不要担心,阅读这篇文章你同样也可以掌握如何在 Jetpack Compose 完成自定义绘制。从 Canvas Composable 开始Canvas Compo原创 2021-08-25 20:54:22 · 1330 阅读 · 2 评论 -
Android 模块化开发实践
一、前言随着业务的快速发展,现在的互联网App越来越大,为了提高团队开发效率,模块化开发已经成为主流的开发模式。正好最近完成了vivo官网App业务模块化改造的工作,所以本文就对模块化开发模式进行一次全面的介绍,并总结模块化改造经验,帮助兄弟项目避坑。二、什么是模块化开发首先我们搞清两个概念,Android客户端开发目前有两种模式:单工程开发模式和模块化开发模式。 单工程开发模式:早期业务少、开发人员也少,一个App对应一个代码工程,所有的代码都集中在这一个工程的一个module里。原创 2021-08-25 16:36:10 · 246 阅读 · 3 评论 -
Android 进阶之路:ASM 修改字节码,这样学就对了!
看了很多 ASM 入门的文章,都感觉文章写的很轻松,站立的高度都太高了,我个人觉得想要能够编写 ASM 相关代码,能看懂字节码是必不可少的,所以本文会以字节码为切入点,带大家简单的入门一下 ASM。Java Class 文件结构大家都知道*.java 文件经过 javac 编译之后会生成 *.class 文件,*.class 文件会被 Java 虚拟机进行加载。Java 虚拟机之所有能够加载class 文件,前提肯定是能够按照某种规则读取 class 文件的内容。那么这个规则就是*.clas原创 2021-08-24 14:39:47 · 1011 阅读 · 2 评论 -
Android 内存、I/O、网络、存储的优化实践
一 内存优化1.1 内存模型与分布上图是常见的java虚拟机的内存分布图: 方法区:主要存储虚拟机加载的类信息,常量,静态变量,及时编译器编译后的代码等数据。内存优化时这一部分主要考虑是不是加载了很多不必要的第三方库。这部分的内存减少主要是常量池的回收和类的卸载(类卸载条件:无引用,类加载器可卸载)。 堆:几乎所有的对象都在这个区域产生,该区域属于线程共享的区域,所以写代码时更要注意多线程安全。这个内存区域的大小变化主要是对象的创建和回收,比如:如果短时间内有大量的对象创建和回收原创 2021-08-23 17:10:23 · 705 阅读 · 4 评论 -
RecyclerView 添加分割线,ItemDecoration 的实用技巧
我的理解:ItemDecoration 允许我们给 recyclerview 中的 item 添加专门的绘制和布局;比如分割线、强调和装饰等等。默认 recyclerview 的表现像下面这样其实我想要的是这样如果我们不使用这个的话,那么我们在编写 xml 文件的时候只能添加 layout_margin 这样的值,而且即便这样在有些场景下也是不好用的。其实也没关系我们可以使用代码控制,比如在 onBindViewHolder 中根据数据的位置写对应的逻辑,像我上面那种我需要把最后一个.原创 2021-08-22 20:24:26 · 632 阅读 · 0 评论 -
Android 金九银十面试准备进行曲-数据结构 Map / List
个人能力有限,暂时不整理温习 红黑二叉树 该篇文章主要讲述 HashMap 、ConcurrentHashMap 部分区别(从扩容消耗内存方面 介绍下ArrayMap),在文章末尾会简单的提到 List 部分的面试知识点。 update time 2019年12月09日13:33:531. HashMap这里的HashMap 主要针对 JDK 1.8 版本,JDK1.7 没有引入红黑树概念HashMap 实际上是一个“链表散列”的数据结构,即数组和链表的结合体。它是基于哈希表的 Map 接口.原创 2021-08-20 20:22:45 · 195 阅读 · 0 评论 -
炫酷到爆表的 Navigation 动画
在上一篇中我们说到了使用Navigation导航Fragment,介绍了Navigation的基本使用,然后突然想到做一些Fragment的跳转动画,所以产生了一些内容哈哈哈Navigation中使用动画通常我们设置一个跳转action是酱紫的:<action android:id="@+id/action_scale1" app:destination="@id/fragmentTwo" app:enterAnim="@anim/scale_in_right.原创 2021-08-20 16:16:12 · 543 阅读 · 0 评论