Android
文章平均质量分 79
_JW
这个作者很懒,什么都没留下…
展开
-
使用注解替代枚举
概述使用枚举Enum能确保类型安全,但往往会加大内存消耗,因为Enum中的枚举值是静态成员对象,相对于静态常量占用更多的内存空间。google官方在很早以前就提醒尽量少的使用枚举,并提供了注解的方式来检查类型安全,目前提供了@IntDef和@StringDef这两种注解方式。注解一、@IntDef定义注解,添加常量@IntDef(value = {AnnotationStatus.TYPE_ONE, AnnotationStatus.TYPE_TWO})@Retention(RetentionP原创 2020-10-22 11:53:06 · 1121 阅读 · 0 评论 -
Android 使用Visualizer获取播放音频的频率
最近项目中需要实时获取播放音频的频率,并绘制波形图,用到了Visualizer这个类,记录下其使用方法:Visualizer.OnDataCaptureListener有两个回调方法,分别是onFftDataCapture和onWaveFormDataCapture,onFftDataCapture返回的是经过傅里叶变换处理后的音频数据,onWaveFormDataCapture返回的是声音的波形数据。计算声音分贝部分代码:val readyData = readyData(fft)val inte原创 2020-07-21 18:28:04 · 2838 阅读 · 0 评论 -
记录RecyclerView聊天页下拉加载页面闪烁问题
在使用RecyclerView做聊天页面时下拉时,使用addAll(0, tempDatas)加载数据后页面会出现闪烁,一开始以为是动画问题,所以加了(itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false处理后,发现还是出现闪烁问题。测试发现,如果直接在数据集尾部添加数据,并不会有闪烁问题,最终定位到getItemId这个方法,该方法我在基类默认的处理是返回position作为id。而当在数据头部添加数据时,导致所有数据原创 2020-07-20 18:40:11 · 580 阅读 · 0 评论 -
Android 圆环进度条(带渐变)控件
效果图:核心代码package com.jw.gradualprogressdemoimport android.animation.ObjectAnimatorimport android.animation.ValueAnimatorimport android.content.Contextimport android.graphics.*import android.u...原创 2020-05-06 15:28:30 · 643 阅读 · 0 评论 -
Glide源码分析(一)
Glide源码分析(一)一、基本使用二、Glide.with方法Glide实例化RequestManagerRetriever#get:三、load方法四、into方法buildRequest方法构建请求requestManager.track(target, request)总结一、基本使用implementation 'com.github.bumptech.glide:glide:4.9...原创 2019-10-12 16:00:42 · 464 阅读 · 0 评论 -
Android 多语言处理
Android 多语言处理由于公司最近在扩展海外市场,所以新项目不可避免的要用到多语言。多语言处理也就是针对用户选择的语言环境来切换并使用不同的string资源。这次项目的具体的业务是当用户首次进入App,默认获取系统语言,如果在语言列表内,则使用该语言,否则,默认使用美式英语。UI界面类似下面,选择不同语言后,当退出页面后才去切换语言环境:一、配置不同环境的资源文件在res目录下...原创 2019-08-05 16:14:56 · 307 阅读 · 0 评论 -
NestedScrollView与EditText滑动冲突处理
监听EditText的触摸事件,判断当前EditText是否可以是上下滚动,如果可以滑动,则请求父控件不拦截子事件,在up事件触发时,将requestDisallowInterceptTouchEvent设置回false。etNote.setOnTouchListener { v, event -> // 控件id if (v.id == R.id.etNote &&a...原创 2019-08-05 14:50:59 · 1104 阅读 · 0 评论 -
Retrofit2源码分析
严格来说,Retrofit并不是一个对网络请求进行封装的框架,因为它的网络请求是通过OkHttp实现的,而实际上它是对网络请求接口的封装。原创 2019-05-24 14:12:10 · 156 阅读 · 0 评论 -
EvenBus源码分析
EventBus分析源码分析1、获取实例2、注册(register)3、反注册(unregister)4、发送事件(post)总结源码分析EventBus 是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,使用简单、效率高、体积小!分析它的源码,我们先从获取实例入手,然后分析下它的register方法,unregi...原创 2019-01-30 11:53:14 · 277 阅读 · 0 评论 -
EventBus粘性事件
EventBus粘性事件普通事件都是在订阅后才可以接收到事件,如果事件的发送在订阅事件之前,则收不到事件。而粘性事件指的是在发送事件之后再订阅该事件也能收到该事件。1、发送粘性事件// 存储粘性事件的Mapprivate final Map<Class<?>, Object> stickyEvents;// 发送粘性事件public void postSti...原创 2019-01-30 18:47:54 · 704 阅读 · 0 评论 -
EventBus中的SubscriberInfoIndex
EventBus中的注解处理器生成的索引类(SubscriberInfoIndex)在EventBus源码解析中的findUsingInfo方法中有说到如果没有配置索引类,那么就会调用findUsingReflectionInSingleClass方法,在运行时利用反射来获取所有被@Subscribe注解标注的订阅方法,但这种做法对应用性能会有一定的损耗,所以在3.0后EventBus提供了索引...原创 2019-01-31 10:23:53 · 332 阅读 · 0 评论 -
RetryAndFollowUpInterceptor拦截器分析
RetryAndFollowUpInterceptor拦截器分析在上篇文章讲解了OKHttp的基本流程后,我们来看下RetryAndFollowUpInterceptor(错误重试和重定向拦截器)的实现。不多说,我们直接看下该拦截器的intercept方法: public Response intercept(Chain chain) throws IOException { Req...原创 2019-02-18 15:49:54 · 656 阅读 · 4 评论 -
BridgeInterceptor拦截器分析
在分析完RetryAndFollowUpInterceptor拦截器后,我们看下BridgeInterceptor(连接桥拦截器)这个拦截器,它的主要作用是在request阶段配置请求头信息,cookie信息等,在response阶段,处理并保存返回的cookie信息,判断是否需要进行gzip解压等。我们直接来看它的 intercept方法中的处理:public Response interc...原创 2019-02-20 11:05:46 · 830 阅读 · 0 评论 -
CacheInterceptor拦截器分析
在分析完BridgeInterceptor拦截器之后,接下来我们看下CacheInterceptor(缓存处理)拦截器,还是从它的intercept方法看起:public Response intercept(Chain chain) throws IOException { // 如果配置了缓存,则通过request获取缓存,默认cache为空 Response cacheCa...原创 2019-02-25 14:02:28 · 1927 阅读 · 0 评论 -
CallServerInterceptor拦截器分析
在分析完ConnectInterceptor拦截器后,终于来到了最后一个拦截器CallServerInterceptor,其主要作用就是向服务器发送请求,最终返回response。还是先看下它的intercept方法:public Response intercept(Chain chain) throws IOException { final RealInterceptor...原创 2019-03-08 18:47:58 · 937 阅读 · 0 评论 -
ConnectInterceptor拦截器分析
在分析完CacheInterceptor拦截器后,我们再来看下ConnectInterceptor这个拦截器,其主要作用就是与服务器建立连接。直接看它的intercept方法:public Response intercept(Chain chain) throws IOException { RealInterceptorChain realChain = (RealIntercep...原创 2019-03-04 15:49:19 · 483 阅读 · 0 评论 -
OKHttp源码分析
OkHttp源码分析OkHttp是个目前比较流行的网络请求框架,现在大部分的应用都有在用它,看了很多大佬们写的OKHttp相关的博客,在这里记录下自己的分析过程。由于OkHttp内容比较多,这篇文章主要先简单分析下OkHttp请求的基本流程。首先,在分析源码之前先看下使用OkHttp请求的示例代码:val okHttpClient = OkHttpClient.Builder() ....原创 2019-02-15 14:17:40 · 641 阅读 · 0 评论