自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

1

  • 博客(14)
  • 收藏
  • 关注

原创 【Android食用指南-01】Android虚拟机&类加载机制

前言在上一篇文章中【JVM入门食用指南-03】JVM垃圾回收器以及性能调优[1],对垃圾回收器以及JVM性能调优进行了叙述,并对JVM中CMS垃圾回收器进行了重点阐述。通过之前在JVM中的铺垫,本文我们回到Android中,本文我们主要对Android虚拟机和类加载机制进行叙述,加深对 Android 的理解。即将学会ART 和 Dalvik Android 类加载流程 热修复实现原理ART 与 DalvikJVM 与 DVMJVM 是我们的 Java 虚拟机,而我们的Andro.

2021-08-31 21:07:24 899 3

原创 字节面试题: Kotlin 中处理生产者/消费者问题的 N 种方式?

生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个缓冲区(Buffer),生产者往 Buffer 中添加产品,消费者从 Buffer 中取走产品,当 Buffer 为空时,消费者阻塞,当 Buffer 满时,生产者阻塞。Kotlin 中有多种方法可以实现多线程的生产/消费模型(大多也适用于Java)Synchronized ReentrantLock BlockingQueue Semaphore PipedXXXStream RxJava Coroutin

2021-08-29 22:19:40 2926 6

原创 Android开发者重读设计模式:写个上传解耦库练练手

上周总算是把设计模式之美看完了,一直想写个东西练练手,碰巧最近要重构公司的上传库,所以有了这篇文章。(仅仅是学习练手,有建议可以提,架构大佬轻喷)0x1、杂谈① 为什么要重构上传库?我司APP在上传图片/视频前,需要进行一系列处理,最后才上传,如:图片:判断路径是否存在 → 通过Exif信息判断是否需要旋转 → 判断是否需要压缩 → 获取MD5 → 如果开启秒传查询是否有秒传记录,有直接返回 → 没有才上传 → 上传完成对应状态更新; 视频:判断路径是否存在 → 判断是否需要压缩 → 要压

2021-08-27 13:54:13 253 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 1299 2

原创 Android 模块化开发实践

一、前言随着业务的快速发展,现在的互联网App越来越大,为了提高团队开发效率,模块化开发已经成为主流的开发模式。正好最近完成了vivo官网App业务模块化改造的工作,所以本文就对模块化开发模式进行一次全面的介绍,并总结模块化改造经验,帮助兄弟项目避坑。二、什么是模块化开发首先我们搞清两个概念,Android客户端开发目前有两种模式:单工程开发模式和模块化开发模式。 单工程开发模式:早期业务少、开发人员也少,一个App对应一个代码工程,所有的代码都集中在这一个工程的一个module里。

2021-08-25 16:36:10 229 3

原创 Android 进阶之路:ASM 修改字节码,这样学就对了!

看了很多 ASM 入门的文章,都感觉文章写的很轻松,站立的高度都太高了,我个人觉得想要能够编写 ASM 相关代码,能看懂字节码是必不可少的,所以本文会以字节码为切入点,带大家简单的入门一下 ASM。Java Class 文件结构大家都知道*.java 文件经过 javac 编译之后会生成 *.class 文件,*.class 文件会被 Java 虚拟机进行加载。Java 虚拟机之所有能够加载class 文件,前提肯定是能够按照某种规则读取 class 文件的内容。那么这个规则就是*.clas

2021-08-24 14:39:47 983 2

原创 Android 内存、I/O、网络、存储的优化实践

一 内存优化1.1 内存模型与分布上图是常见的java虚拟机的内存分布图: 方法区:主要存储虚拟机加载的类信息,常量,静态变量,及时编译器编译后的代码等数据。内存优化时这一部分主要考虑是不是加载了很多不必要的第三方库。这部分的内存减少主要是常量池的回收和类的卸载(类卸载条件:无引用,类加载器可卸载)。 堆:几乎所有的对象都在这个区域产生,该区域属于线程共享的区域,所以写代码时更要注意多线程安全。这个内存区域的大小变化主要是对象的创建和回收,比如:如果短时间内有大量的对象创建和回收

2021-08-23 17:10:23 693 4

原创 RecyclerView 添加分割线,ItemDecoration 的实用技巧

我的理解:ItemDecoration 允许我们给 recyclerview 中的 item 添加专门的绘制和布局;比如分割线、强调和装饰等等。默认 recyclerview 的表现像下面这样其实我想要的是这样如果我们不使用这个的话,那么我们在编写 xml 文件的时候只能添加 layout_margin 这样的值,而且即便这样在有些场景下也是不好用的。其实也没关系我们可以使用代码控制,比如在 onBindViewHolder 中根据数据的位置写对应的逻辑,像我上面那种我需要把最后一个.

2021-08-22 20:24:26 621

原创 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 187

原创 炫酷到爆表的 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 533

原创 Android 组件化代码中心化问题之.api化方案

一、代码中心化问题将一个大型的项目拆分成多个Module或者新开的组件化项目,想要的预期是这些module之间是平级的关系.这样一来就可以使得业务相对集中,每个人都可以专注在一件事上。同时,代码的耦合度也会随之降低,达到高度解耦状态,因为同级的module不存在依赖关系,在编译上就是隔离的,这会让组件间的依赖非常清楚,同时也具有更高的重用性,组件强调复用,模块强调职责划分。 他们没有非常严格的划分。达到可复用要求的模块,那么这个模块就是组件。每个组件的可替代性、热插拔、独立编译都将可行,

2021-08-19 15:49:52 376 3

原创 探讨一下:单Activity+多Fragment模式

自从知道这一招之后我基本不太愿意使用activity了,fragment可以快速创建和管理,可以合理设计页面跳转,设计炫酷的跳转动画,一些操作可以统一进行管理。用Fragment替代Activity以前大部分时候都是将Activity作为页面,Fragment作为页面中的子页面(当时称之为碎片),基本上大部分功能由activity实现,比如老版本的淘宝app就是有上百个activity,当时卡顿的不要不要的。随着技术迭代,我们发现activtiy创建、切换、销毁所消耗的性能远比fragment要大.

2021-08-18 15:49:22 4629 1

原创 Jetpack LiveData 如何安全的观察数据

LiveData 是什么?LiveData是JetPack组件之一,LiveData是一个可观察的数据持有类,可以感知生命周期。 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。(来自Android官方解释)LiveData的介绍和使用不在累述,直接看官方文档,本篇文章旨在讲解Liv.

2021-08-17 21:04:17 186 1

原创 Android 架构 MVC MVP MVVM,这一波你应该了然于心

MVC,MVP和MVVM是软件比较常用的三种软件架构,这三种架构的目的都是分离,避免将过多的逻辑全部堆积在一个类中。在Android中,Activity中既有UI的相关处理逻辑,又有数据获取逻辑,从而导致Activity逻辑复杂不单一难以维护。为了一个应用可以更好的维护和扩展,我们需要很好的区分相关层级,要不然以后将数据获取方式从数据库变为网络获取时,我们需要去修改整个Activity。架构使得View和数据相互独立,我们把应用分成三个不同层级,这样我们就能够单独测试相关层级,使用架构能够把大多数逻

2021-08-17 16:31:14 476 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除