自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Android LiveData 源码实现

LiveData 在项目中时常用到,但是对其源码解读不深,所以深入了解一下。MutableLiveData<Integer> intLiveData = new MutableLiveData<>();intLiveData.setValue(12);intLiveData.observe(this, integer -> { Log.d("Main", "integer " + integer);});上面是LiveData的普通用法,根据用法来追踪代码实

2021-03-03 09:49:00 162

原创 Android SharedPreferences 源码实现

在Android中保存数据的方式之一就是使用 SharedPreferences , 因为会用到这个类,所以想分析下它的源码实现。1. 获取SharedPreference实例。val sharedPreference = getSharedPreferences("main", Context.MODE_PRIVATE)sharedPreference.edit().putBoolean("init", true).apply()通常使用方式是通过 Context 获取一个 SharedPref

2021-03-01 14:51:50 181

原创 RecyclerView.Adapter.notifyItemChanged() 源码分析

项目开发过程中遇到一个RecyclerView的问题,场景是一个页面使用RecyclerView展示本地的图片,然后用户点击其中的图片时可以改变当前图片的选中状态。我使用的是 mAdapter.notifyItemChanged() 这个方法来更新UI, 但是自测时确发现,调用这个方法之后,对应位置的Item闪了一下,可以看下面的Gif图效果。不明白这个闪一下的动画怎么出现的(其实在测试看来是一个BUG), 所以决定研究一下。Part one: RecyclerView.Adapter.notifyI

2021-02-21 14:10:07 1403 2

原创 TCP 可靠传输

TCP是传输层协议,提供可靠传输,本文列举一下 TCP 可靠传输的一些实现机制。1. 重传机制1.1 序号和确认号TCP 是面向字节流的,然后针对每一个要传递的字节在TCP中都会有一个编号。在TCP header中有两个字段 序号和确认号用于表示发送了多少数据和接收了多少数据。举例就是客户端发送请求,请求报文里面的序号就是客户端发送了多少数据;服务端接收到之后回复的ACK报文的确认号就是当前服务端接收了多少数据。序号和确认号是重传机制实现的基础。1.2 常见重传机制在复杂的网络情况下有可能出现数

2021-02-19 15:42:50 221

原创 HTTP和HTTPS协议的一些基本认知

HTTP 协议超文本传输协议: 网络中两点之间传输文本、图片、视频和文件等内容的协议基本概念状态码状态码用于标识当前连接的状态,包括连接中的状态和结果状态1XX 代表的是中间状态,此时服务端还未返回结果2XX 代表的是成功状态,此时服务端已经收到请求并处理返回数据。3XX 代表的是重定向,表示资源地址发生变化4xx 代表的是请求错误,可能是地址错误也可能是参数等错误5xx 代表的是服务端处理错误,可能是逻辑错误也可能是其他常见字段host: 域名,服务定位地址connect

2021-02-18 17:38:57 428

原创 线程池源码实现分析

线程池使用代码:public static void main(String[] args) { ExecutorService service = Executors.newFixedThreadPool(3); for (int i = 0; i < 12; i++) { service.submit(() -> System.out.println("name " + Thread.currentThread())); }}主要分析线程池的创

2021-02-07 14:09:01 97

原创 LinkedBlockQueue

LinkedBlockQueue 源码分析LinkedBlockQueue 继承关系CollectionAbstractCollectionAbstractQueueLinkedBlockingQueueLinkedBlockQueue 还实现了 BlockingQueue 接口。 通过继承关系可以知道 LinkedBlockQueue 是一个容器类,所以就主要分析他的数据封装方式和对数据的管理方式。BlockingQueue 接口的一些方法博客围绕 LinkedBlock

2021-02-06 17:03:47 439

原创 ReentrantLock实现

通过ReentrantLock源码,分析下Java Lock接口的实现ReentrantLock lock = new ReentrantLock();Condition condition = lock.newCondition();new Thread(() -> { lock.lock(); try { System.out.println("start wait t1"); condition.await(); } catch (I

2021-02-03 10:52:26 124

原创 Glide 学习计划

熟悉Glide使用分析Glide.with(context).load(url).into(view) 的内部实现初始化流程和获取RequestManagerGlide.with(context)会获取一个RequestManager对象. 在这个过程中涉及到Glide 初始化 RequestManagerRetriever接下来一步步分析.Glide.with(this).load(IMG_URL).into(mBinding.ivImg);@NonNullpublic

2021-02-01 11:58:58 303

原创 Java Thread 实现方式

       关于Thread有一个比较有趣的面试题。当你new 一个Thread的时候,直接调用它的run()方法,run()会执行在哪个线程? 答案是调用run()的线程,因为只有在调用start()之后,Java才会创建一个新的线程,然后新的线程再调用执行Java代码里面的run()。看如下代码,一个简单的实现:Thread thread = new Thread(){ public...

2018-05-09 08:45:45 8525

原创 Android Handler实现机制

其实网络上已经有很多Handler的讲解了,写这篇博客其实也只是为了记录一下,加深下理解。其实写这篇博客是因为以前再面试的时候被问到Thread Handler Looper之间的关系的时候,我回答错了,我说的是三者之间都是一一对应的关系。其实只有Thread和Looper之间是一一对应的关系,而Looper和Handler之间其实可以说是一对多的关系。而且我是在看了老罗写的关于Handler机制

2017-10-22 23:18:37 194

原创 Android so库的了解

项目开发中遇到一个视频不能上传的问题,使用的是腾讯云里面提供的小视频的第三方SDK。我的手机是华为荣耀7,最终问题定位的是 “Didn't find class "com.tencent.sha1utils.TXSHA1" ”,说是在arm和armeabi-v7a里面没有找到对应的类,根据以前的解决方式推测是缺少对应的so文件,但是只知道引入第三方库的时候需要在libs或jniLibs文件夹里面添

2017-10-14 22:32:28 1180

空空如也

空空如也

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

TA关注的人

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