自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kotlin中by lazy是如何实现懒加载的

1,属性委托  by lazy在kotlin中使用是很常见的,用于实现懒加载某个数据。而这两个单词不是一体的,其中by是kotlin中的关键字,用于实现委托;lazy是一个方法,他的返回值是委托的具体对象。因此,想要了解by lazy的实现,则必须先去明白属性委托的机制。委托就是将本身的实现交给别的对象去实现,因此,若要实现属性委托,则需要将属性的get/set方法交给委托对象去实现。/** * thisRef 属性所属的对象,可为null * property 属性相关的一些参数,比如属性名称

2021-01-08 11:50:28 7178 3

原创 一行一行分析Jetpack之LiveData

LiveData是jetpack系列中的一员,它是一种遵循观察者模式的数据包装,并且可以观察组件的生命周期状态来决定是否发送消息以及是否需要移除观察者。本文将分析LiveData的实现方式,从源码一行一行进行分析。并且还会介绍它的两个子类MutableLiveData以及MediatorLiveData,以及MediatorLiveData的使用方式Transformations。

2020-05-31 22:40:27 1091

原创 AIDL快速使用上手

AIDL即Android接口定义语言,是用来实现跨进程通信的一种模板语言,即as可以通过aidl文件自动生成一些Java语言,以方便我们的使用。它底层是使用Binder进行通信的,但是自己手写的话是还是比较麻烦的,因此可以使用AIDL定义接口语言,然后经过构建后就会生成对应的代码。之前也学习的时候也写过Demo,但时间久了就容易忘,再写的时候还得去查,这里记录一下AIDL的使用,方便以后查询。...

2020-03-31 16:26:43 257

原创 Android Drawable简单使用

BitmapDrawableBitmapDrawable是一种简单的Drawable,它代表着一张图片。在实际中我们通常是直接引用图片,但这种方式比较单一,一些其他的操作如抗锯齿防抖动等无法显式进行控制,而使用BitmapDrawable则可以通过一些属性进行更加细腻化的调整。简单使用...

2019-10-30 16:28:53 350

原创 一个简单的圆弧刷新动画

之前刷贴吧的时候看到的贴吧的刷新动画,就是一个圆弧旋转的动画,感觉挺好看的,就抽空实现了一下。最终的结果是这样的:分析从上图中可以看出,动画的效果是三段圆弧进行旋转,同时弧度也在逐渐增大缩小,这里采用的是在onDraw中绘制三段圆弧。 // 绘制圆弧 mPaint.setColor(mTopColor); canvas.drawArc(left, top...

2019-09-22 21:23:28 372

原创 MVP+Retrofit2+RxJava2练手项目,玩Android客户端

玩Android客户端简介针对玩Android网站开放API实现的客户端程序,能够方便在手机上快速浏览喜欢的文章。项目采用标准的MVP+Retrofit2+RxJava2框架进行开发,...

2019-08-21 14:35:49 257

原创 BroadcastReceiver使用详解

Broadcast Receiver介绍  在Android系统中,系统会在某些特定情况下发送一系列的广播,例如开关机,开启关闭飞行模式,打开关闭网络连接等。而应用程序则可以使用BroadcastReceiver来接收这些消息并进行相应的操作,从而给用户较好的体验。例如关闭WIFI的时候应用可以提醒用户打开数据连接等,例如接收到开机广播的时候可以自动开启应用服务等。  另外,除了系统外,An...

2019-07-16 15:43:42 472

原创 Android四大组件Service使用介绍

Android四大组件之Service简述Service 是Android中的组件之一,与Activity、Broadcast、Content Provider共称为四大组件。从名字也可以看出Service主要是提供服务的,它运行在后台,虽然由其他组件启动,但并不依赖其他组件。也就是说即使启动它的组件被销毁了,Service也可以继续在后台运行。生命周期Service有两种启动方式,不同...

2019-06-24 17:18:38 436

原创 基于RxJava+Retrofit实现的MVP基础框架

问题引出  看过上文的MVP初步实践,则应该知道了MVP的实现的基本思路。就是通过对Model,View,Presenter进行一些封装,从而连接它们之间的关系。但是,上文仅仅是对于普通的项目进行的封装,而在实际中,我们通常会导入RxJava和Retrofit来方便开发。  因此,这里将会基于RxJava+Retrofit来丰富我们的MVP框架。当然,要继续向下看的必须具有一些RxJava的基...

2019-04-12 12:19:01 245

原创 MVP初步实践

对于一个基本的Android项目,我们在初学的时候的做法通常都是直接在xml中绘制界面,然后在对应的Activity中做一些响应操作。而一旦项目的稍微有点规模,就会导致Activity变得越来越大。这样的后果就是当我们需要对界面进行修改的时候会导致很难查找,并且由于所有的操作都在activity中,耦合度很高,当修改某一处的时候,可能会涉及到多个方面,从而需要修改多处。解决这个问题的方法...

2019-04-12 10:02:52 260

原创 从源码学习自定义View(三):Layout和Draw过程

Layout  前面讲述了measure过程和LayoutParams的生成问题,到这里View的整个绘制过程已经差不多了,剩下的就是layout过程和draw过程了。  另外对于布局,就是将View的位置固定下来。值得注意的是,这里的位置是相对于父View而言的,也就是说,以父View的左上角为坐标零点的相对位置。// View.javapublic void layout(int l...

2019-03-20 17:23:58 145

原创 从源码学习自定义View(二):LayoutParams

LayoutParams  在前面的measure过程中我们知道,当父View给子View构建MeasureSpec的时候不是直接构建的,而是根据父View的宽高模式和子View的LayoutParams共同的作用下生成MeasureSpec。  这里就关乎到了LayoutParams,从名字可以看出这是布局参数,也就是子View所携带的布局参数,通常是在xml中设置的,如我们常用的andr...

2019-03-20 17:23:21 401

原创 从源码学习自定义View(一):Measure过程

android提供给我们的View很多,但是在开发中我们会遇到各种不同的需求,对View的样式也会有不同的要求。这时系统提供给我们的View就不够用了,最好的方法就是使用自定义View,这样的View是可控的,可以根据我们的需求去定制它的样式。而要自定义View就必须对View整个绘制过程了解透彻,这样才能在自定义View的时候得心应手,而要了解其绘制过程当然是需要从源码追踪的,理解其绘制过程...

2019-03-17 16:50:59 296

原创 浅谈View的事件分发机制

View的事件分发是指对于屏幕的Touch事件的分发。首先,当在屏幕上进行操作的时候,会触发一系列的touch事件,系统会将其封成 MotionEvent,然后向下分发给各个View,寻找事件的处理者。过程:首先,事件会从顶层的ViewGroup逐渐向下传递(在这个过程中判断是否拦截,若拦截则不再向下传递而是直接开始处理),然后又从底层View再向上传递(在这个过程中开始处理事件,若是处理的话...

2019-02-14 16:42:23 221 2

原创 Handler消息机制详解,另对于MessageQueue阻塞线程的详解

概述android中非主线程是不能进行UI操作的,而且在主线程中也不能进行耗时操作。那么当需要进行耗时操作后再更新UI界面又该怎么办呢?这里就是采用了Handler方式在子线程中进行耗时操作,待操作完成后向UI线程发送消息更新UI界面。该过程涉及四个对象,Handler,Message,Looper,MessageQueue。那么这四者又是如何配合来达到发送消息的呢?用送信的方式来形容如下:...

2019-01-13 20:10:23 5999 5

原创 Activity异常下的生命周期、启动模式和标记位,隐式启动匹配规则IntentFilter

1,Activity异常情况下的生命周期在Activity遭遇非正常退出时,其生命周期会有所不同。例如处于后台的Activity由于内存不足而导致被销毁,由于配置改变而导致的重建等。  在这种情况下是非用户操作而导致的,也就是说是有可能再次显示的。因此Activity会调用两个方法来进行数据的保存和恢复。onSaveInstanceState(Bundle outState)和onRes...

2019-01-08 20:28:22 166

原创 从源码看LinkedHashMap如何实现的排序

LinkedHashMap源码分析 LinkedLinkedHashMap继承自HashMap,与HashMap不同的是,LinkedLinkedHashMap实现了HashMap所不具备的排序功能。所使用的方式是将HashMap的节点连接成双向链表结构,从而实现排序功能。  LinkedHashMap具有两种排序方式:按照插入顺序排序和按照最近使用顺序排序。而最近使用顺序正好是LRU算法实...

2019-01-06 15:04:16 1800 3

原创 Android中LruCache源码分析及其不同版本的区别

Android LruCache 源码解析Lru算法,即最近最少使用算法。是对于内存管理的一种策略,会将最近最少使用的数据缓存移除。举例说明: 若是缓存大小为4,按顺序添加数据分别是 1 2 3 4 此时访问数据 2 ,则访问完成后内部排序就会变成 1 3 4 2 若是再添加一个数据5,则会删除1,此时内部排序为3 4 2 5 即超过最大容量时,会将使用最少...

2019-01-03 20:30:13 287

空空如也

空空如也

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

TA关注的人

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