自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 okhttp连接复用

okhttp的连接复用,实则是依靠ConnectInterceptor连接拦截器实现的。在关键方法上依次会走 newStream->findHealthyConnection->findConnection 最后获取到一个可用的连接findConnection分析这也是获取到可复用连接的关键,总的来说可以分为三步,第一步会先判断是否存在可复用的连接,如果有则直接用,如果没有则去连接池里面获取,如果连接池里面没有获取到,则最后才会去创建一个新的连接,并添加到线程池中。...

2022-04-09 19:36:20 1349

原创 okhttp发送一个请求的流程

okhttp发送请求的流程图主要是经过各种拦截器,最后经过各个拦截器返回以结果。这里提示的是拦截器不要字面理解就是拦截了,这里的拦截器是拦截下来自己做处理,处理完毕以后交给下一个,最后经过所有拦截器的处理返回,其实可以简单理解为每一道工序,但不同的是这里可能不需要经过所有拦截器就返回了,比如有缓存的话,就不需要去请求了,走到缓存拦截器这里就可以返回了。下面就是请求的流程,一些重要的代码也有,可以对照去看一下可以看出来其实一个请求进行经过了各种拦截器,最后返回了,这也是okhttp的责任链模式的特

2022-04-09 16:10:53 561

原创 Android事件分发流程

文章目录序言正文尾言序言个人的一些写博客想法用图解,用大白话直接解释具体代码可以参照流程图去阅读源码不喜欢那种一上来就是贴一大堆源码的写博客方式了,一篇几千字的博客,代码粘贴占大部分,自己写了几百字,感觉这种博客看的很疲惫,现在想给图,理清思路由读者自己带着逻辑去阅读源码应该效率更高。可能考虑后面会写一点关键代码出来,以方便读者阅读源码定位,但是保持图解为主。正文关键方法ViewGroup:dispatchTouchEvent,onInterceptTouchEvent,

2022-04-01 16:54:34 1851

原创 Handler分发机制

Looper 负责循环程序的执行和MessageQueue消息队列。Handler是负责消息通信。发送消息:当我们调用handler发送消息的时候,会先把消息压入消息队列中,等待looper循环程序进行处理。循环程序:Looper会启动loop方法启动循环程序然后调用handler的分发方法去处理消息,回调给相应的线程去处理。在UI线程中我们不需要去给线程创建Looper对象,UI线程会自动创建。但是如果我们是自己的其他线程中,我们需要去创建一个Looper对象,然后调用prep.

2022-03-25 17:10:01 2114

原创 kotlin扩展函数,扩展属性,伴生对象简要

kotlin扩展函数,扩展属性,伴生对象kotlin扩展函数扩展函数可以在已有类中添加新的方法,不会对原类做修改扩展函数是静态解析的若扩展函数和成员函数一致,则使用该函数时,会优先使用成员函数扩展一个空对象,在扩展函数内, 可以通过 this 来判断接收者是否为 NULL,这样,即使接收者为 NULL,也可以调用扩展函数kotlin扩展属性扩展属性允许定义在类或者kotlin文件中,不允许定义在函数中。初始化属性因为属性没有后端字段(backing field),所以不允许被初始化,只能

2022-03-02 15:32:22 130

原创 android频谱实现(离散傅立叶)

利用离散傅立叶打造一个频谱app先来look一下效果:视频播放地址来看一下离散傅立叶算法这是我的,当然每个人的实现方式会一定偏差,主要是要依据傅立叶变化来。 int N = 16; double PI = 3.1415926; float[] real = new float[N]; float[] imag = new float[N];

2021-02-05 17:18:01 3217 5

原创 笔趣阁小说api

笔趣阁api小说api,提供小说相关api接口,目前支持笔趣阁(https://m.bqkan.com/)。ip地址:http://49.234.123.245:8082笔趣阁(https://m.bqkan.com/)首页ip+/getHome小说分类ip+/getTypes?url=/sort/1_1/小说内容ip+/getContent?url=/0/790/36873824.html查询ip+/Search?s=2758772450457967865&a

2021-01-30 19:15:36 6919 6

原创 LinkedBlockingQueue和ArrayBlockingQueue区别和注意点

LinkedBlockingQueue和ArrayBlockingQueue 俩个使用注意我们创建一个全局线程池的时候会传一个这样的类型进去,这里就需要注意下俩个的区别通俗来说LinkedBlockingQueue会同步ArrayBlockingQueue 则是你的正常思维异步,所以前者也会更占用内存。使用时机你要自己注意了。另外LinkedBlockingQueue它不会强制要求你传线程数,但是建议你一定要传,因为你不传默认就是无限,MAX,这样操作可能会导致你的内存溢出,后者则会强制要求你传递一.

2020-07-01 10:45:05 222

原创 USB转串口调试硬件设备

场景首先我这里是一台长方形的设备,虽然玩了这么久我不知道这个玩意叫啥,但是没关系它里面是装的android系统,然后这台设备需要链接一个称重的设备进行串口调试,意思很明显,长方形设备需要获取到称重设备的重量信息,从而来进行相应的处理。我这台设备可以直链接串口也可以转usb链接,其实原本就是直链接串口的线,只是我直插串口链接不到,后来再接了个usb插上去,然后…好了。所以这里提醒一下广大的朋友,如有类似情况可以转个usb试试。搜索设备方法,listItems是一个集合,listitem是封装的一个

2020-06-24 09:38:05 947

原创 Glide4.5分析

Glide4.5分析Glide的基本流程介绍常见调用方式Glide.with(context).load((T)url).into(imageView);这里调用了三个方法WithLoadIntoWith方法:首先进入Glide类中调用这个方法public static RequestManager with(@NonNull Context context) { return getRetriever(context).get(context);}

2020-06-24 09:21:10 357

原创 java传值和传引用问题

这个问题还是很常见的,如果你平常敲代码比较多你可能经常会遇到这个问题。如果你知道java这个机制,你可能还会一直在找代码的问题。java中的值传递和引用传递。比如下面有这俩个方法 private void updataValue(String s){ s = "123"; } private void updataValue(JSONObject object){ object.put("a",12); }如果我传递一个字符串进行.

2020-06-08 15:23:35 176

原创 LayoutInflater.inflate()参数用法及导致适配器布局宽度高度错乱问题

这个LayoutInflater.inflate()应该用的都挺频繁的,比如你的fragment,你的适配器里面都会有用到。但它的参数的意义你都理解嘛?有没有遇到过这样一个问题?你的适配器宽度明明设置了全部但是实际上却没有,布局错乱了,然后你苦寻无果,最后你直接在代码中动态重新设置了一次宽度,获取屏幕的宽度在代码中动态直接设置。今天我们就来解释一下这个LayoutInflater.inflate()和上面的问题。LayoutInflater.inflate()方法你可以传三个参数也可以参俩个参数,.

2020-06-02 15:33:50 771

原创 后台更新数据方案

当你遇到一些让你大吃一惊的解决方案的时候你不要惊讶,要学会低头去面试它,解决它。

2020-06-01 16:07:29 1020

原创 recyclerview缓存机制导致的布局错乱问题

recyclerview和listview都是比较熟悉的玩意,我一直用的recyclerview比较多,当然如果我想偷懒的话我就会写个listview解决。如果你有一个这样的需求你想做一个和饿了么一样的购物界面,每个商品都会有加减数量,然后你是这样写的,你布局里面放置一个recyclerview,然后再写一个子布局,再写一个适配器,然后载入数据,ok你写完了。这样写当然不会有错误,你的逻辑也是正确的,但是当你运行的时候你会发现,当你在第一个商品选择好购买数量以后,你往下滑动大概九个的样子,然后再回到第一个你

2020-06-01 15:44:06 852

原创 ASOP入坑记第一章

第一章装Ubantu16.04由于z比较贫穷,买不起MacBook买不起新电脑,技术又菜,所以选择了用VM装一个Ubantu16.04探探路,谷歌也推荐使用Ubantu来跑ASOP。现在时间是15:23时间我的Ubantu还在装,还没有装完成,比较悲伤,不知道为什么装的这么慢。竟然它还在装,z就来看看ASOP的理论基础知识。遗憾,没找到资料。我个人觉得就我这菜鸡水平,应该不够看天书的代码,我必须配合着它运行效果来玩。...

2020-05-22 15:30:15 1297

原创 论安卓系统安全性

由于时间关系,所以以下我侧重于结果叙述,相比于专业性的我尽量一笔带过。安卓系统是由谷歌推出的一款移动终端,由于开源所以国内出现了许多系统,比如魅族,华为,小米,oppo等。但它们的安全性一致来说是非常危险的,当然不是说国产系统写的不好,这也是由于安卓本身开源的问题,没有ios系统闭源,所有应用都由苹果把关。现在由我去搞一个普通用户,我只需要拿到一些相应的权限即可。这些权限在现在的主流app中都由...

2020-05-01 13:16:34 5092 1

原创 自定义控件系列四 (仿YouTube拖拽视频控件的实现)

您的浏览器不支持播放该视频!实现这个拖拽动画最重要的我们需要重写一下基本控件方法,setHeight,setWidht,setMarintop属性等,不然我们无法使用属性动画来实现,整个过程将会复杂许多。上节也提到了要想在属性动画中使用height widht这些属性我们就需要去实现相应的set方法。先贴出完成代码,然后再讲解:布局文件:<?xml version="1.0" enc...

2020-03-29 20:17:03 497

原创 自定义控件系列三(小说app打开书籍翻页效果)

打开小说类app,一般老设计都会这样,一个书架上面放着整整齐齐的书籍,然后你点击一个书籍,这个书籍就会慢慢的放大到全屏幕,然后会有一个翻页效果。自定义控件系列三就来实现这么一个效果,这个章节主要内容在动画这一块,其实和自定义控件关系不是很大,但是不管怎么说,学好这个动画对开发还是很有用处的。这里如果你没用接触过属性动画这一块,我就先简单说一下用法,属性动画用法很简单,主要用到的方法 ofFloa...

2020-03-29 20:16:24 1007

原创 自定义控件系列二(26字母导航条)

先来句古德莫宁26字母导航条很早就有了,比如微信的联系人列表,比如网易云搜索音乐的列表都有。不过我不怎么喜欢这个设计感觉有点老。不过项目需求需要还是自己手撸了一个,思路也很简单,唯一的麻烦就知识判断坐标而已,但如果你看过事件分发源码这个也是很好理解。先上代码:public class XzPyNavigationBar extends LinearLayout { private C...

2020-03-23 09:16:02 387

原创 自定义控件系列一(网格布局控件开发实战)

废话最近压力比较大,也不知道是来自哪方面的压力,反正就是不开心,郁郁寡欢。现在这个自定义系列的文章,可能也是刚自己对自定义控件有了一定理解,来这里洋洋得意搞个自定义系列文章,不过就当记录下心得,打发下时间吧。对了,最近还看了下Android与IOS的招聘要求,不看不知道,一看吓一跳,怎么说呢,起码现在给我的感觉是Android技术深入大海,IOS就相对来说少说对了,没那么华丽。比较注重基础技...

2020-03-15 18:43:17 417

原创 ViewPager 分析(章节二)

接上一篇博客,这边博客说下实战情况。总不能一直纸上谈兵。这里我们重点围绕实现网易云云村(viewpager嵌套scrollview上下滑动冲突解决)效果来谈关于viewpager的问题。提出问题:viewpager怎样进行布局的viewpager怎样滚动的viewpager里面嵌套了scrollview怎样解决掉滑动冲突(效果要与网易云音乐的云村一样)viewpager里面的Adapg...

2020-03-08 19:26:20 306

原创 ViewPager 分析(章节一)

公司项目中有用到各种花里胡哨的滑动,什么左右滑动,上下滑动,惯性滚动回拉,滑动冲突。一言难尽,只能死磕viewpager。提出问题:viewpager怎样进行布局的viewpager怎样滚动的viewpager里面嵌套了scrollview怎样解决掉滑动冲突(效果要与网易云音乐的云村一样)viewpager里面的Adapger有什么用viewpager动画问题viewpager怎么...

2020-03-08 15:33:50 117

原创 app接入微信第三方支付详解以及坑

上一篇文章我们介绍了支付宝的接入,这一篇我们正式介绍一下app怎么接入微信支付功能正文微信sdk下载微信支付文档微信签名工具app首先我们微信和支付宝一样,都需要导入相应的sdk 微信sdk下载 ,下载完成后正常导入即可。这里微信是不支持沙箱环境的。一般会遇到的问题:(这里我说了几个比较常见的坑)微信第一次调用成功以后,后面调用会返回失败,或者没有响应。key签名文件与微信服务器...

2020-02-27 11:26:47 2021

原创 app接入支付宝支付功能详解以及坑

app接入第三方支付之支付宝教程 支付宝开放文档链接这里我们就说一些细节问题首先我们下载好支付宝sdk然后直接导入到我们项目中就可以了,这一步操作就不多说了。这里是我封的一个支付方法返回的是一个Message对象,需要传进去一个订单号。这样封一下是为了我们调用支付的时候方便调用。我们支付宝与微信不同,支付宝是支持沙箱环境的,当我们需要特别主要这句代码,EnvUtils.setEnv(En...

2020-02-26 16:07:23 2638 4

原创 在主线程中循环暂停更新ui为什么只在最后一次刷新ui

接着我们上一篇文章提出来的问题,我特意去源码中寻找了答案,我们现在知道只要我们主线程暂停的时候没有请求就不会抛出无响应(ANR)异常,那你可能这样想,比如下面这几行代码for (int i=0;i<10;i++){ try { //这里是更新图片高度与宽度 UploadImage(500 +...

2020-02-16 15:04:47 1496

原创 记录一个问题不要在主线程中去休眠(具体原因待解决)

如果你有这么个想法我有一张图片我现在在一帧时间放大他一点,然后循环很多次,这样就会产生一个动画效果。这样想法我不否认你做不到,但请你开个子线程去休眠然后更新,千万千万千万不要直接在主线程中休眠循环刷新,这样第一可能会导致ANR界面无响应,第二只会在最后一次刷新ui,也就是你看不到动画效果了。...

2020-02-16 11:30:44 378

原创 安卓放大手势缩小手势算法(开源控件ZhxGesture)

对于新手来说怎么写个缩放的手势算法可能是个有点上头的问题,这里我介绍一下我写的一个缩放算法逻辑,感觉挺清晰明了,你只需要还记得高中的一些三角函数与平面坐标系知识就够了。言归正传先上代码。private void OnTouchClick(View v,MotionEvent event){ switch (event.getAction() & MotionEvent.A...

2020-02-16 09:59:22 622

原创 开源控件CustomDate之触摸模式的实现

最近公司要求做个触摸日历,怎么个触摸日历呢,如果我们在pc来做当然是很简单的,因为鼠标有个移入监听,但如果放在移动端来,就麻烦了,我们总不能隔空感应吧。所以我是这样处理的,比如我们的日历下面有个放置日期的区域,我们做了这个区域的监听,当我们按下的时候,触发了我们的点击事件即(DOWN),当我们移动的时候会触发(MOVE)事件,移动的时候我们监听xy的坐标变化。当我们移动到相应的日期区域后触发相应的...

2020-02-15 14:10:35 505

原创 单例设计模式

单例设计模式保证对象的不变性。在某种情况你可能需要多个地方取得同一个对象。这个时候你可以使用单例模式。第一种方式:饿汉式 线程安全,调用效率高,但是不能延时加载。缺点:如果你不适用这个类,他还是加载了。public class Test{ private static static Test test=new Test; public Test(){ }...

2020-02-15 13:45:22 138

原创 Android常见内存泄漏

Handler的使用容易造成内存泄漏,我们平常使用handler直接就new了一个非静态内部类,这里就出现了问题,非静态内部类会持有外部类的引用,而我们GC的回收标准就是当一个对象没有了任何引用则会被回收,这样会导致我们的外部无法被正常回收。(当我们handler中有延时消息时)。解决:1.释放掉handler中的所有信息2.使用静态内部类,静态内部类不会持有外部类的引用,而我们如果需要使...

2020-02-15 13:44:42 150

原创 Android线程池

前言在android开发中经常会使用多线程异步来处理相关任务,而如果用传统的newThread来创建一个子线程进行处理,会造成一些严重的问题:1:在任务众多的情况下,系统要为每一个任务创建一个线程,而任务执行完毕后会销毁每一个线程,所以会造成线程频繁地创建与销毁。2:多个线程频繁地创建会占用大量的资源,并且在资源竞争的时候就容易出现问题,同时这么多的线程缺乏一个统一的管理,容易造成界面的卡顿...

2020-02-15 13:43:32 115

原创 双向链表结构及其实现

java双向链表结构在jdk1.2中就已有用到,在java的线程池队列中也均有用到。所谓的双向链表结构如其名字,它有俩个端口,一个头部,一个尾部,支持向前遍历,或者向后遍历。代码实现:dData : 当前数据next : 下一个指针previous : 上一个指针public class Link { public long dData; public Link nex...

2020-02-15 13:39:14 423

原创 代理模式

代理模式前言我们平常买票,可能到过年高峰期会出现买不到票的情况,这个时候我们可能就会委托黄牛,或者携程这些第三方的帮我们进行抢票。又可以说比如我们的代理服务器,我客户端通过代理服务器和我们真正的服务器进行交流,如爬虫服务器。又可以说我们买房子,租房子,我们提要求给中介,由中介替我们去找寻房子。又可以说我们要去见某个领导处理某件事情,可能我们需要先联系它的助理,然后由助理代我们去转达。这...

2020-02-15 13:38:20 145

原创 universalvideoview之拖拽播放视频控件

universalvideoview一款简单易用的视频播放控件怎么实现视频拖拽控件开发的?思路如下:继承framlayout,重写坐标监听方法。思路很简单,贴出相关代码。布局代码:<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schema...

2020-02-15 13:37:28 263

原创 killProcess与system退出 (疑惑)

android.os.Process.killProcess 与 system.exit 退出方式android.os.Process.killProcessProcess.killProcess 最终是调用 linux API kill() 发送 SIGKILL 信号。了解 Linux 编程的都知道,进行收到这个信息都会立即结束进程,Android 下不同的是 ActivityManag...

2020-02-15 13:36:43 362

原创 安卓屏幕适配解决方案之ScreenMatch插件

用法:在AS中导入ScreenMatch插件,导入完毕重启即可。准备一个dimens.xml文件做基础(文章最后给出)然后利用插件生成相应的十几套适配dp文件,具体用哪套根据用户的手机自动选择。1dp变成dp_1dsp变成sp_10.5dp变成dp_0_5优势:使用方便。劣势:生产资源文件较多,切适配精确度有限,如果想要精确度高,需要细分,这样又会导致资源文件的增大。新项目可以使...

2020-02-15 13:36:03 728

原创 OKhttp项目缓存使用思路

这一章我们从应用层面来讲述一下okhttp在一个商城项目中的使用策略。这是我20120-01-01时候的思路。以公司的项目来讲。首先先科普一下请求头缓存知识:noCache(),不使用缓存,使用网络请求noStore(),不使用缓存也不存储缓存数据maxAge(),缓存的有效时间,超过该时间会重新请求数据maxStale(),超过缓存有效时间后,可继续使用旧缓存的时间,之后需要重新请求...

2020-02-15 13:35:18 159

原创 非UI线程更新UI问题

我们都知道在android中我们想更新一个ui,一定要在主线程中更新,也就是UI线程。因为这和我们的安卓系统设计有关,安卓的系统设计是单线程模式。规定 更新ui必须在主线程中那么会存在一些情况违反了这种规定,但又偏偏没有报错,运行成功。第一种情况,我们直接在onCreate中开启一个子线程更新ui,这是成功的。为什么呢?因为我们的视图绘制是由ViewRootImpl来管理,而ViewRoot...

2020-02-15 13:34:34 335

原创 okhttp3之GET,POST源码角度分析

前言1.okhttp现在使用越来越广泛,许多第三方的框架里面需要网络的都使用了okhttp,比如bmob等,由于个人项目原因最近一段时间用volley比较多,所以对okhttp有点生疏了,现在我们来重温习一遍okhttp。2.个人认为volley适用于小型个人项目,如果是较大项目还是动用okhttp吧。3.本篇文章是基于okhttp3.8.0版本源码来讲述。4.导入声明:(impleme...

2019-11-11 11:04:21 205

原创 个人博客服务器

个人博客服务器 (node框架开发)成品网站连接(即此服务器支持开发的成品个人博客网站) http://47.94.255.154:8080/zhx_blog/index.htmlgithub地址:https://github.com/zouhuanxin/person_blog服务器开发目的有二1.自己刚好想做个博客2.竟然都做了那就干脆把服务器拓展下服务器支持俩种使用方式soc...

2019-11-07 10:44:57 340

空空如也

空空如也

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

TA关注的人

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