
Android
文章平均质量分 79
阿邹邹
活的开朗
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
okhttp连接复用
okhttp的连接复用,实则是依靠ConnectInterceptor连接拦截器实现的。在关键方法上依次会走 newStream->findHealthyConnection->findConnection 最后获取到一个可用的连接findConnection分析这也是获取到可复用连接的关键,总的来说可以分为三步,第一步会先判断是否存在可复用的连接,如果有则直接用,如果没有则去连接池里面获取,如果连接池里面没有获取到,则最后才会去创建一个新的连接,并添加到线程池中。...原创 2022-04-09 19:36:20 · 1479 阅读 · 0 评论 -
okhttp发送一个请求的流程
okhttp发送请求的流程图主要是经过各种拦截器,最后经过各个拦截器返回以结果。这里提示的是拦截器不要字面理解就是拦截了,这里的拦截器是拦截下来自己做处理,处理完毕以后交给下一个,最后经过所有拦截器的处理返回,其实可以简单理解为每一道工序,但不同的是这里可能不需要经过所有拦截器就返回了,比如有缓存的话,就不需要去请求了,走到缓存拦截器这里就可以返回了。下面就是请求的流程,一些重要的代码也有,可以对照去看一下可以看出来其实一个请求进行经过了各种拦截器,最后返回了,这也是okhttp的责任链模式的特原创 2022-04-09 16:10:53 · 631 阅读 · 0 评论 -
Android事件分发流程
文章目录序言正文尾言序言个人的一些写博客想法用图解,用大白话直接解释具体代码可以参照流程图去阅读源码不喜欢那种一上来就是贴一大堆源码的写博客方式了,一篇几千字的博客,代码粘贴占大部分,自己写了几百字,感觉这种博客看的很疲惫,现在想给图,理清思路由读者自己带着逻辑去阅读源码应该效率更高。可能考虑后面会写一点关键代码出来,以方便读者阅读源码定位,但是保持图解为主。正文关键方法ViewGroup:dispatchTouchEvent,onInterceptTouchEvent,原创 2022-04-01 16:54:34 · 1948 阅读 · 0 评论 -
记录一个问题不要在主线程中去休眠(具体原因待解决)
如果你有这么个想法我有一张图片我现在在一帧时间放大他一点,然后循环很多次,这样就会产生一个动画效果。这样想法我不否认你做不到,但请你开个子线程去休眠然后更新,千万千万千万不要直接在主线程中休眠循环刷新,这样第一可能会导致ANR界面无响应,第二只会在最后一次刷新ui,也就是你看不到动画效果了。...原创 2020-02-16 11:30:44 · 434 阅读 · 0 评论 -
Handler分发机制
Looper 负责循环程序的执行和MessageQueue消息队列。Handler是负责消息通信。发送消息:当我们调用handler发送消息的时候,会先把消息压入消息队列中,等待looper循环程序进行处理。循环程序:Looper会启动loop方法启动循环程序然后调用handler的分发方法去处理消息,回调给相应的线程去处理。在UI线程中我们不需要去给线程创建Looper对象,UI线程会自动创建。但是如果我们是自己的其他线程中,我们需要去创建一个Looper对象,然后调用prep.原创 2022-03-25 17:10:01 · 2166 阅读 · 0 评论 -
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 · 3619 阅读 · 5 评论 -
LinkedBlockingQueue和ArrayBlockingQueue区别和注意点
LinkedBlockingQueue和ArrayBlockingQueue 俩个使用注意我们创建一个全局线程池的时候会传一个这样的类型进去,这里就需要注意下俩个的区别通俗来说LinkedBlockingQueue会同步ArrayBlockingQueue 则是你的正常思维异步,所以前者也会更占用内存。使用时机你要自己注意了。另外LinkedBlockingQueue它不会强制要求你传线程数,但是建议你一定要传,因为你不传默认就是无限,MAX,这样操作可能会导致你的内存溢出,后者则会强制要求你传递一.原创 2020-07-01 10:45:05 · 280 阅读 · 0 评论 -
USB转串口调试硬件设备
场景首先我这里是一台长方形的设备,虽然玩了这么久我不知道这个玩意叫啥,但是没关系它里面是装的android系统,然后这台设备需要链接一个称重的设备进行串口调试,意思很明显,长方形设备需要获取到称重设备的重量信息,从而来进行相应的处理。我这台设备可以直链接串口也可以转usb链接,其实原本就是直链接串口的线,只是我直插串口链接不到,后来再接了个usb插上去,然后…好了。所以这里提醒一下广大的朋友,如有类似情况可以转个usb试试。搜索设备方法,listItems是一个集合,listitem是封装的一个原创 2020-06-24 09:38:05 · 1065 阅读 · 0 评论 -
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 · 438 阅读 · 0 评论 -
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 · 258 阅读 · 0 评论 -
LayoutInflater.inflate()参数用法及导致适配器布局宽度高度错乱问题
这个LayoutInflater.inflate()应该用的都挺频繁的,比如你的fragment,你的适配器里面都会有用到。但它的参数的意义你都理解嘛?有没有遇到过这样一个问题?你的适配器宽度明明设置了全部但是实际上却没有,布局错乱了,然后你苦寻无果,最后你直接在代码中动态重新设置了一次宽度,获取屏幕的宽度在代码中动态直接设置。今天我们就来解释一下这个LayoutInflater.inflate()和上面的问题。LayoutInflater.inflate()方法你可以传三个参数也可以参俩个参数,.原创 2020-06-02 15:33:50 · 964 阅读 · 0 评论 -
后台更新数据方案
当你遇到一些让你大吃一惊的解决方案的时候你不要惊讶,要学会低头去面试它,解决它。原创 2020-06-01 16:07:29 · 1112 阅读 · 0 评论 -
recyclerview缓存机制导致的布局错乱问题
recyclerview和listview都是比较熟悉的玩意,我一直用的recyclerview比较多,当然如果我想偷懒的话我就会写个listview解决。如果你有一个这样的需求你想做一个和饿了么一样的购物界面,每个商品都会有加减数量,然后你是这样写的,你布局里面放置一个recyclerview,然后再写一个子布局,再写一个适配器,然后载入数据,ok你写完了。这样写当然不会有错误,你的逻辑也是正确的,但是当你运行的时候你会发现,当你在第一个商品选择好购买数量以后,你往下滑动大概九个的样子,然后再回到第一个你原创 2020-06-01 15:44:06 · 982 阅读 · 0 评论 -
ASOP入坑记第一章
第一章装Ubantu16.04由于z比较贫穷,买不起MacBook买不起新电脑,技术又菜,所以选择了用VM装一个Ubantu16.04探探路,谷歌也推荐使用Ubantu来跑ASOP。现在时间是15:23时间我的Ubantu还在装,还没有装完成,比较悲伤,不知道为什么装的这么慢。竟然它还在装,z就来看看ASOP的理论基础知识。遗憾,没找到资料。我个人觉得就我这菜鸡水平,应该不够看天书的代码,我必须配合着它运行效果来玩。...原创 2020-05-22 15:30:15 · 1389 阅读 · 0 评论 -
论安卓系统安全性
由于时间关系,所以以下我侧重于结果叙述,相比于专业性的我尽量一笔带过。安卓系统是由谷歌推出的一款移动终端,由于开源所以国内出现了许多系统,比如魅族,华为,小米,oppo等。但它们的安全性一致来说是非常危险的,当然不是说国产系统写的不好,这也是由于安卓本身开源的问题,没有ios系统闭源,所有应用都由苹果把关。现在由我去搞一个普通用户,我只需要拿到一些相应的权限即可。这些权限在现在的主流app中都由...原创 2020-05-01 13:16:34 · 5381 阅读 · 1 评论 -
自定义控件系列四 (仿YouTube拖拽视频控件的实现)
您的浏览器不支持播放该视频!实现这个拖拽动画最重要的我们需要重写一下基本控件方法,setHeight,setWidht,setMarintop属性等,不然我们无法使用属性动画来实现,整个过程将会复杂许多。上节也提到了要想在属性动画中使用height widht这些属性我们就需要去实现相应的set方法。先贴出完成代码,然后再讲解:布局文件:<?xml version="1.0" enc...原创 2020-03-29 20:17:03 · 571 阅读 · 0 评论 -
自定义控件系列三(小说app打开书籍翻页效果)
打开小说类app,一般老设计都会这样,一个书架上面放着整整齐齐的书籍,然后你点击一个书籍,这个书籍就会慢慢的放大到全屏幕,然后会有一个翻页效果。自定义控件系列三就来实现这么一个效果,这个章节主要内容在动画这一块,其实和自定义控件关系不是很大,但是不管怎么说,学好这个动画对开发还是很有用处的。这里如果你没用接触过属性动画这一块,我就先简单说一下用法,属性动画用法很简单,主要用到的方法 ofFloa...原创 2020-03-29 20:16:24 · 1204 阅读 · 0 评论 -
自定义控件系列二(26字母导航条)
先来句古德莫宁26字母导航条很早就有了,比如微信的联系人列表,比如网易云搜索音乐的列表都有。不过我不怎么喜欢这个设计感觉有点老。不过项目需求需要还是自己手撸了一个,思路也很简单,唯一的麻烦就知识判断坐标而已,但如果你看过事件分发源码这个也是很好理解。先上代码:public class XzPyNavigationBar extends LinearLayout { private C...原创 2020-03-23 09:16:02 · 453 阅读 · 0 评论 -
自定义控件系列一(网格布局控件开发实战)
废话最近压力比较大,也不知道是来自哪方面的压力,反正就是不开心,郁郁寡欢。现在这个自定义系列的文章,可能也是刚自己对自定义控件有了一定理解,来这里洋洋得意搞个自定义系列文章,不过就当记录下心得,打发下时间吧。对了,最近还看了下Android与IOS的招聘要求,不看不知道,一看吓一跳,怎么说呢,起码现在给我的感觉是Android技术深入大海,IOS就相对来说少说对了,没那么华丽。比较注重基础技...原创 2020-03-15 18:43:17 · 486 阅读 · 0 评论 -
ViewPager 分析(章节二)
接上一篇博客,这边博客说下实战情况。总不能一直纸上谈兵。这里我们重点围绕实现网易云云村(viewpager嵌套scrollview上下滑动冲突解决)效果来谈关于viewpager的问题。提出问题:viewpager怎样进行布局的viewpager怎样滚动的viewpager里面嵌套了scrollview怎样解决掉滑动冲突(效果要与网易云音乐的云村一样)viewpager里面的Adapg...原创 2020-03-08 19:26:20 · 398 阅读 · 0 评论 -
ViewPager 分析(章节一)
公司项目中有用到各种花里胡哨的滑动,什么左右滑动,上下滑动,惯性滚动回拉,滑动冲突。一言难尽,只能死磕viewpager。提出问题:viewpager怎样进行布局的viewpager怎样滚动的viewpager里面嵌套了scrollview怎样解决掉滑动冲突(效果要与网易云音乐的云村一样)viewpager里面的Adapger有什么用viewpager动画问题viewpager怎么...原创 2020-03-08 15:33:50 · 175 阅读 · 0 评论 -
app接入微信第三方支付详解以及坑
上一篇文章我们介绍了支付宝的接入,这一篇我们正式介绍一下app怎么接入微信支付功能正文微信sdk下载微信支付文档微信签名工具app首先我们微信和支付宝一样,都需要导入相应的sdk 微信sdk下载 ,下载完成后正常导入即可。这里微信是不支持沙箱环境的。一般会遇到的问题:(这里我说了几个比较常见的坑)微信第一次调用成功以后,后面调用会返回失败,或者没有响应。key签名文件与微信服务器...原创 2020-02-27 11:26:47 · 2219 阅读 · 0 评论 -
app接入支付宝支付功能详解以及坑
app接入第三方支付之支付宝教程 支付宝开放文档链接这里我们就说一些细节问题首先我们下载好支付宝sdk然后直接导入到我们项目中就可以了,这一步操作就不多说了。这里是我封的一个支付方法返回的是一个Message对象,需要传进去一个订单号。这样封一下是为了我们调用支付的时候方便调用。我们支付宝与微信不同,支付宝是支持沙箱环境的,当我们需要特别主要这句代码,EnvUtils.setEnv(En...原创 2020-02-26 16:07:23 · 2951 阅读 · 4 评论 -
在主线程中循环暂停更新ui为什么只在最后一次刷新ui
接着我们上一篇文章提出来的问题,我特意去源码中寻找了答案,我们现在知道只要我们主线程暂停的时候没有请求就不会抛出无响应(ANR)异常,那你可能这样想,比如下面这几行代码for (int i=0;i<10;i++){ try { //这里是更新图片高度与宽度 UploadImage(500 +...原创 2020-02-16 15:04:47 · 1583 阅读 · 0 评论 -
安卓放大手势缩小手势算法(开源控件ZhxGesture)
对于新手来说怎么写个缩放的手势算法可能是个有点上头的问题,这里我介绍一下我写的一个缩放算法逻辑,感觉挺清晰明了,你只需要还记得高中的一些三角函数与平面坐标系知识就够了。言归正传先上代码。private void OnTouchClick(View v,MotionEvent event){ switch (event.getAction() & MotionEvent.A...原创 2020-02-16 09:59:22 · 712 阅读 · 0 评论 -
开源控件CustomDate之触摸模式的实现
最近公司要求做个触摸日历,怎么个触摸日历呢,如果我们在pc来做当然是很简单的,因为鼠标有个移入监听,但如果放在移动端来,就麻烦了,我们总不能隔空感应吧。所以我是这样处理的,比如我们的日历下面有个放置日期的区域,我们做了这个区域的监听,当我们按下的时候,触发了我们的点击事件即(DOWN),当我们移动的时候会触发(MOVE)事件,移动的时候我们监听xy的坐标变化。当我们移动到相应的日期区域后触发相应的...原创 2020-02-15 14:10:35 · 601 阅读 · 0 评论 -
单例设计模式
单例设计模式保证对象的不变性。在某种情况你可能需要多个地方取得同一个对象。这个时候你可以使用单例模式。第一种方式:饿汉式 线程安全,调用效率高,但是不能延时加载。缺点:如果你不适用这个类,他还是加载了。public class Test{ private static static Test test=new Test; public Test(){ }...原创 2020-02-15 13:45:22 · 172 阅读 · 0 评论 -
Android常见内存泄漏
Handler的使用容易造成内存泄漏,我们平常使用handler直接就new了一个非静态内部类,这里就出现了问题,非静态内部类会持有外部类的引用,而我们GC的回收标准就是当一个对象没有了任何引用则会被回收,这样会导致我们的外部无法被正常回收。(当我们handler中有延时消息时)。解决:1.释放掉handler中的所有信息2.使用静态内部类,静态内部类不会持有外部类的引用,而我们如果需要使...原创 2020-02-15 13:44:42 · 216 阅读 · 0 评论 -
Android线程池
前言在android开发中经常会使用多线程异步来处理相关任务,而如果用传统的newThread来创建一个子线程进行处理,会造成一些严重的问题:1:在任务众多的情况下,系统要为每一个任务创建一个线程,而任务执行完毕后会销毁每一个线程,所以会造成线程频繁地创建与销毁。2:多个线程频繁地创建会占用大量的资源,并且在资源竞争的时候就容易出现问题,同时这么多的线程缺乏一个统一的管理,容易造成界面的卡顿...原创 2020-02-15 13:43:32 · 154 阅读 · 0 评论 -
双向链表结构及其实现
java双向链表结构在jdk1.2中就已有用到,在java的线程池队列中也均有用到。所谓的双向链表结构如其名字,它有俩个端口,一个头部,一个尾部,支持向前遍历,或者向后遍历。代码实现:dData : 当前数据next : 下一个指针previous : 上一个指针public class Link { public long dData; public Link nex...原创 2020-02-15 13:39:14 · 505 阅读 · 0 评论 -
universalvideoview之拖拽播放视频控件
universalvideoview一款简单易用的视频播放控件怎么实现视频拖拽控件开发的?思路如下:继承framlayout,重写坐标监听方法。思路很简单,贴出相关代码。布局代码:<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schema...原创 2020-02-15 13:37:28 · 328 阅读 · 0 评论 -
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 · 463 阅读 · 0 评论 -
安卓屏幕适配解决方案之ScreenMatch插件
用法:在AS中导入ScreenMatch插件,导入完毕重启即可。准备一个dimens.xml文件做基础(文章最后给出)然后利用插件生成相应的十几套适配dp文件,具体用哪套根据用户的手机自动选择。1dp变成dp_1dsp变成sp_10.5dp变成dp_0_5优势:使用方便。劣势:生产资源文件较多,切适配精确度有限,如果想要精确度高,需要细分,这样又会导致资源文件的增大。新项目可以使...原创 2020-02-15 13:36:03 · 835 阅读 · 0 评论 -
OKhttp项目缓存使用思路
这一章我们从应用层面来讲述一下okhttp在一个商城项目中的使用策略。这是我20120-01-01时候的思路。以公司的项目来讲。首先先科普一下请求头缓存知识:noCache(),不使用缓存,使用网络请求noStore(),不使用缓存也不存储缓存数据maxAge(),缓存的有效时间,超过该时间会重新请求数据maxStale(),超过缓存有效时间后,可继续使用旧缓存的时间,之后需要重新请求...原创 2020-02-15 13:35:18 · 224 阅读 · 0 评论 -
非UI线程更新UI问题
我们都知道在android中我们想更新一个ui,一定要在主线程中更新,也就是UI线程。因为这和我们的安卓系统设计有关,安卓的系统设计是单线程模式。规定 更新ui必须在主线程中那么会存在一些情况违反了这种规定,但又偏偏没有报错,运行成功。第一种情况,我们直接在onCreate中开启一个子线程更新ui,这是成功的。为什么呢?因为我们的视图绘制是由ViewRootImpl来管理,而ViewRoot...原创 2020-02-15 13:34:34 · 428 阅读 · 0 评论 -
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 · 272 阅读 · 0 评论 -
安卓 (菜单子列项,底部弹出框,验证码输入框) 自定义控件实现
Custom_Android_UI项目Github地址,点击前往。安卓自定义菜单子项控件,底部弹出框控件,验证码输入框控件。没有做成插件,因为美观没有进行处理,不过功能是出来了,想用的码友可以把源码拿去稍微美化下使用。这里一共做了三个自定义UI:菜单子列项底部弹出框验证码输入框直接先来看看实现图把:菜单子列项底部弹出框 验证码输入框 好的,不是很美...原创 2019-11-07 10:39:26 · 703 阅读 · 0 评论 -
安卓事件分发机制
前言Android的事件分发机制应该都要了解了解虽然水平菜,但是总要看。网上有大量关于Android事件分发机制的文章,但都比较老,菜鸟看起来估计有点困难。我这里推荐一篇比较好的文章,在文章末尾我再给出文章连接,如果看我的文章觉得说的浅薄或者想更深入了解可以去看看推荐的这篇文章。本篇文章基于安卓9源码来讲诉事件分发先小总结一下简单的理解就是下面这三个方法玩来玩去:dispatch...原创 2019-11-07 10:38:43 · 294 阅读 · 0 评论 -
安卓屏幕适配解决方案
安卓屏幕适配解决方案国内安卓手机众多,由于安卓是开源的,不同厂商都可以定制属于自己的系统,定制这就导致了屏幕的不同意,给开发人员带来了很多困扰啊,屏幕适配就是很明显的一个问题。我们先引入几个概念 dp px dpi densitydp:dp=dip只是说法不同px:像素 (这个就不用多说了)dpi:每英寸的像素点数。density:每平方英寸像素点数。这里给出他们之间的换算公式:...原创 2019-11-02 20:53:08 · 1213 阅读 · 0 评论