自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bchen的博客

学习与技术分享,进步是不懈追求

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

原创 setWillNotDraw()方法原理

在ViewGroup中默认是不进行绘制的,onDraw()和draw(canvas)方法都不会调用,因为ViewGroup为了提升性能默认情况下是不开启绘制的,可以通过调用setWillNotDraw(false)打开ViewGroup的绘制。setWillNotDraw怎么实现的?我们知道绘制的流程是:draw(Canvas canvas, ViewGroup parent, long drawingTime)->draw(Canvas canvas)->onDraw(Canvas ca

2020-06-24 11:08:08 2333 1

原创 Record

bitmap在2.3以下版本,内存在native分配,需要主动recycle()释放内存;8.0以下分配在java heap,有垃圾管理机制统一管理,无需手动释放内存;8.0以上,内存分配在native层,生命周期跟随java对象,内存自动释放,也不需主动释放内存。...

2020-04-16 14:19:13 196

原创 RecyclerView实现悬浮吸顶、分隔线、到底提示效果

本文中所有效果均通过ItemDecoration实现,通过此实现的可以实现与业务解耦,让RecyclerView的模板更加简洁,不关心任何辅助性ui,附上github地址:https://github.com/ChenSWD/EasyStickyDecoration...

2020-01-07 21:31:58 933

原创 RecyclerView中View的添加复用

本文以通俗的语言,记录在阅读RecyclerView源码时的一些心得????。添加view的过程在使用recyclerView的setAdapter方法设置adapter时,会调用RecyclerView的requestLayout()方法,进而执行measure、layout等生命方法;何时添加的子view(adapter里面的一堆):在RecyclerView执行layout时,实际会调用L...

2019-12-17 12:59:47 1374

原创 MessageQueue之SyncBarrier的作用

postSyncBarrier()

2019-11-01 16:34:13 1024

原创 分析ConcurrentHashMap的源码实现(jdk1.8)

ConcurrentHashMap不仅实现了多线程的同步读写而且轻量级,这是它相比于HashMap和HashTable的优势。HashMap是线程不安全的,它没有提供任何的同步机制,多线程并发访问会有问题。HashTable虽然提供了同步机制,但是它是通过整个对象加锁达到同步的,是重量级的,并发性较低。下面将通过put()和get()方法,分析ConcurrentHashMap的主要实现。一、C...

2018-10-24 18:49:34 366

原创 源码分析AQS独占锁、共享锁和Condition的实现

AbstractQueuedSynchronizer是java.util.concurrent包下非常重要和基础的类,concurrent包下提供了一系列的同步操作需要的工具,包括了ReentrantLock、ReentrantReadWriteLock、ThreadPoolExecutor、CountDownLatch、LinkedBlockingQueue等等,该包下很多的工具类都直接或者间接...

2018-10-20 12:10:15 2154

原创 分析ThreadLocal的实现原理

ThreadLocal是开发中常会使用的一个工具,从类的名字就可以看出,它为线程提供本地变量,即:每个线程私有的数据。下面直接进入源码。1、使用方法:// Entity 存放线程要保存的信息ThreadLocal<Entity> threadLocal = new ThreadLocal<Entity>();//为线程设置私有数据thre

2018-10-15 11:55:57 505

原创 Gradle之持续集成 - 使用Jenkins构建Gradle项目

参考《Gradle IN Action》书中使用Jenkins构建Gradle项目过程。 持续集成(Continuous Integration,CI)是一个软件开发实践,其提倡频繁地集成代码,对于每个变化,源代码都会通过自动化构建被编译和测试,从而有效地减少集成难度,让项目中的问题今早暴露出来。Jenkins是一种开源的CI服务器。 介绍下持续集成的步骤: 提交代码->触发构建-&a

2018-09-17 10:05:41 30418 1

原创 Gradle之Gradle扩展-自定义插件以及发布

通常我们会想要将一个非常有用的task共享给多个项目使用,Gradle插件正可以解决这一问题。Gradle插件是非常强大的,如Java插件,一行代码:apply plugin: 'java',就可以使用Java插件实现代码的编译、测试和打包成JAR文件;在android中,我们经常使用:apply plugin: 'com.android.application'来加载android插件。1、...

2018-09-17 10:04:59 3869

原创 Gradle之多项目构建

Gradle对构建模块化项目提供了强大的支持,在Gradle中每一个模块都是一个项目,称之为Gradle多项目构建技术,多项目构建实现了项目模块化,降低代码耦合度,增加内聚性,本篇文章将简单介绍如何使用Gradle进行多项目构建。1、组装多项目构建:Gradle整个项目是由一个根目录和多个模块的子目录构成,在根目录下新建build.gradle构建脚本,使用gradle projects命令查...

2018-09-17 10:04:10 6167

原创 Gradle之task的使用

在上一篇文章中(https://blog.csdn.net/weixin_38062353/article/details/82230239)做了对gradle的基本介绍,本篇文章将探索最基础的gradle构建块:project和task以及它们和API之间的映射。一、构建块。每一个Gradle构建脚本中都会包含三个基本的构建块,project、task和property。每一个构建都至少...

2018-09-17 10:03:35 22664

原创 Gradle之重新认识Gradle(项目结构、命令行、task、构建Java项目、包装器)

前言:之前一直接触使用Gradle完成Android项目的自动化构建,所谓重新认识Gradle是因为最近看了《Gradle IN Action》一书,对gradle进行了一次全面深刻的重新的认识。所以决定以系列博客,来完成自己对Gradle学习之路的一个总结与认识。...

2018-09-17 10:02:44 3358

原创 ThreadPoolExecutor的使用及源码分析

ThreadPoolExecutor自己也经常使用,也看过几次源码,但是源码具体执行流程在经过一段时间之后有些就变得模糊。所以还是在此记录一下ThreadPoolExecutor源码中的关键点和自己对代码的理解。 在文章前面部分介绍一下ThreadPoolExecutor相关知识点、使用流程(该部分内容参考:https://www.jianshu.com/p/ae67972d1156,感谢其作者...

2018-09-14 13:51:05 489

原创 android可以无限循环滑动的ViewPager

前言:最近有需求需要某个页面是可以无限滑动的,这个页面是用ViewPager实现的,但是ViewPager本身并不能无限滑动,所以想在android现有ViewPager的基础之上,实现这个功能,本文提供基于PagerAdapter和FragmentPagerAdapter的可以复用view和fragment的一种实现,github地址:。分析: ViewPager滑动边界是怎么判断的? ...

2018-09-10 11:47:09 8892

原创 播放器手势:基于GestureDetector实现(双击、快进快退、音量亮度调节)

最近有个播放器手势滑动快进快退的需求,研究了一下Android中GestureDetector的用法,封装了一个工具类,实现了单击、双击、横向滑动(快进快退)、竖向滑动(亮度音量调节)手势。代码参见:https://github.com/ChenSWD/PlayerGestureDetector1、在播放器中,常用的一些功能一般有:快进快退、亮度音量调节、双击暂停/播放、单击隐藏/显示播放器的...

2018-08-29 23:42:59 3379 1

原创 android 使用ndk(socket)进程保活

最近看了动脑学院的一个ndk进程守护的课程,特在此记录一下。由于个人之前对linux系统还是有所学习的,所以代码看起来基本没什么问题,在这里主要记录一下相关主要知识点、进程保活的主要实现原理。 代码我进行了整理,可参考git地址:https://github.com/ChenSWD/ProcessKeepAliveDemo.git1.保活实现原理:在ndk层,fork()一个子进程,子进程作...

2018-08-12 22:09:01 3559 4

原创 Android 属性动画代码分析(基于ObjectAnimator)

android属性动画是开发中经常使用的一项技能,但是我之前却从没有深究过动画实现原理,本文基于android 8.0,撸了一把ObjectAnimator源码,分析属性动画执行关键的过程。一、动画执行的两个主要的问题动画每一帧执行的信号是如何产生的:是handler循环还是。。。?View的属性是怎么产生变化的:在每一帧循环中,view的属性是怎么样被改变的二、带着上述的两个问...

2018-08-11 12:04:53 692

原创 android API 26 中对 findViewById()泛型的理解

android在api 26中的findViewById方法使用了泛型,使我们在开发中免了强转类型的苦恼,今天突然冒出了一个疑问(个人在之前对泛型还没有深入理解),故在此记录一下: findViewById()怎么知道我要的是哪一种类型,也就是说它怎么能根据不同ID刚好强转成相对应的View。1.一般来说方法泛型原型是这个样子的:public <T extends View&g...

2018-08-11 12:02:45 1777

空空如也

空空如也

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

TA关注的人

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