ViewPager2是在RecyclerView的基础上构建而成的,意味着其可以复用RecyclerView对象的绝大部分特性,比如缓存复用机制等。作为ViewPager2系列的第一篇,本篇的主要目的是快速普及必要的前置知识,而内容的核心,正是前面所提到的RecyclerView的缓存复用机制。RecyclerView,顾名思义,它会回收其列表项视图以供重用。具体而言,当一个列表项被移出屏幕后,R
2022-12-20 michael007js 58
前言在我的上一篇*为什么Google要将LiveData设计成粘性的*文章中,有一位爱思考的小伙伴留下了这么一个评论。在看到这个评论后,我产生了两个疑问?LiveData的观察者对象必须得处于主线程中吗?究竟是什么原因让Google这么设计,正是这位小伙伴所述的原因吗?由此有了这篇文章,再次感谢这位小伙伴的留言探讨。观察者对象必须得处于主线程中吗?先说答案:是的,LiveData的观察者对象必须处
2022-12-20 michael007js 135
前言作为一名Android开发者,如果你熟悉MVVM架构,熟悉Jetpack组件,那么相信你肯定使用过ViewModel。正如它的名字一样,它是Google推出的一个类,方便我们实现MVVM架构中的ViewModel层。我们在其中处理View层所需的数据,然后在特定条件下通知View层进行UI更新。正如官方所介绍:ViewModel 类以注重生命周期的方式存储和管理界面相关的数据。ViewMode
2022-12-20 michael007js 99
前言相信很多人在职业生涯的面试过程中都被问过一个问题?面试官:我看你简历上有写 LiveData,那你能说说 LiveData 是粘性的吗?这确实是一个值得深入思考的知识点,今天就让我们站在Google设计者的角度来深入学习一下LiveData。LiveData是粘性的吗?关于这个问题,我们首先应该知道,粘性是什么意思?不知道你对EventBus熟不熟悉,我第一次接触粘性这个概念,就来自于Even
2022-12-20 michael007js 83
前言相信大家都用过EventBus这个开源库,它基于发布/订阅者模式用于组件间的沟通,解耦合避免出现回调地狱,使用起来十分简单也很好用。这样的开源库是很值得我们学习的,今天就来学习一下他的源码与设计思想。 使用方法使用方法很简单,按照官方文档介绍,分为三个步骤。步骤1:定义事件public static class MessageEvent { }复制代码步骤2:准备订阅者定义订阅方法,来处理收到
2022-12-20 michael007js 86
前言我们都知道 Activity 与 Fragment 都是有生命周期的,例如:onCreate()、onStop() 这些回调方法就代表着其生命周期状态。我们开发者所做的一些操作都应该合理的控制在生命周期内,比如:当我们在某个 Activity 中注册了广播接收器,那么在其 onDestory() 前要记得注销掉,避免出现内存泄漏。生命周期的存在,帮助我们更加方便地管理这些任务。但是,在日常开发
2022-12-20 michael007js 42
在清明节时各大APP都会进行黑白化处理,当时在接到这个需求的时候感觉好麻烦,是不是又要搞一套皮肤?然而在一系列搜索之后,找到了两位大神(鸿洋、U2tzJTNE)的实现方案,其实相当的简单!让我们一起站在巨人的肩膀上来分析一下原理,并思考会不会有更简便的实现?一、原理两位大神的置灰方案是相同的,都能看到一段同样的代码:Paint mPaint = new Paint();ColorMatrix mC
2022-12-16 michael007js 80
无论何时,只要去做网络请求相关的事情,都离不开HTTP(超文本传输)协议,它是Web上任何数据交换的基础,同时也是一个客户端-服务器协议;这些年间,HTTP经历很多变化,也有助于塑造其灵活性,下面我们来简单谈谈HTTP在各个版本做了哪些改变通过本文,你将了解学习到如下内容HTTP这些年来,在迭代过程做了哪些优化,以及存在哪些不足?HTTP0.9、Http1.0和Http1.1、SPDY及2.0、Q
2022-12-16 michael007js 50