Okhttp框架介绍
OkHttp 是由 Square 公司开源的一个高性能 HTTP 客户端,是目前 Java 和 Android 生态中最主流、事实上的网络请求标准库。Android 官方从 Android 4.4 起底层已将 HttpURLConnection 替换为 OkHttp 实现,而当下流行的 Retrofit 网络框架底层也是交由 OkHttp 负责真正的网络收发。 相比 JDK 自带的 HttpURLConnection 或早期的 Apache HttpClient,OkHttp 具有显著的优势: 性能卓越:原生支持 HTTP/2 协议(多路复用)和连接池,能够共享同一个 Socket 连接,大幅降低 TCP 握手开销与请求延迟。 自动处理:支持透明的 GZIP 压缩(自动压缩请求体并解压响应体,节省流量)、响应缓存(避免重复网络请求)、以及自动处理重定向和故障恢复。 API 简洁优雅:封装程度高,无需手动处理繁琐的流和状态码,代码量大幅减少,开发效率极高。 灵活的拦截器链:基于责任链设计模式,允许开发者轻松插拔日志记录、统一 Token 注入、签名校验、失败重试等功能...
自定义LayoutManager实现卡片滑动
前言 前面介绍了利用自定义ItemDecoration实现RecyclerView吸顶效果,重点就在onDraw -> ItemView -> onDrawOver的绘制流程,同时注意预留空间的利用。 今天介绍一个新的知识点与demo,利用自定义LayoutManager的方式实现卡片滑动。有时候系统提供的LayoutManager已经不能够满足我们的需求,这个时候我们就需要自定义LayoutManager。 卡片滑动效果介绍卡片滑动的效果如下图所示。 分析一下卡片效果,顶部的卡片是正常摆放,接着的后面两张会随着位置变化缩小、下移,产生视觉上的叠层效果,再然后的卡片就与第三张重叠摆放。可以滑动移除图片,下面的卡片会自动补全。 实现这样的效果突破点在于两点: 要实现这样重叠式布局的效果,我们就需要自定义LayoutManager,就像系统自带的LinearLayoutManager、GridLayoutManager一样。 滑动移除效果的实现,没有重写scrollVerticallyBy以及scrollHorizontallyBy,这就需要一个重要的帮助类Ite...
自定义PhotoView手势处理
前言 前面介绍了前面介绍了嵌套滑动、自定义Behavior等高级UI实现原理,今天介绍一种比较简单的高级UI用法——手势处理。 你可以点开自己的手机相册,点开任意一张图片,双击图片会有放大效果,再次双击会缩小为原来大小。并且双指操作可以放大缩小图片。今天,小编就来实现一下这样的PhotoView效果。但是我的效果处理肯定不是很完美,毕竟追求代码简洁。 效果展示图: 手势处理API首先,先介绍一个Android处理单指手势的API GestureDetector,在创建一个GestureDetector对象时需要传入一个监听者OnGestureListener,所以我们需要实现OnGestureListener,通常实现SimpleOnGestureListener这个接口里面的功能就足够我们使用了,所以实现它即可。 SimpleOnGestureListener的方法介绍 class PhotoScaleGestureDetector extends GestureDetector.SimpleOnGestureListener{ //在ACTIO...
通知的创建
前言 小编在前面讲Service的时候用到了通知,还记得我们用来干嘛吗?没错,为了在程序退到后台后前台依然知道该程序的存在,在音乐、地图等APP非常常见。 通知是啥?拿起你的智能机,下拉一下通知栏。看到了吧! 但是,通知的设计初衷是好的,后来却被开发者玩坏了。 开发者为了增加自己的应用程序的打开率,发送各种各样的通知以博取更多的展示机会。作为用户的我们对这些垃圾信息非常厌恶。 虽然Android系统允许我们将某个应用程序的通知完全屏蔽,以防止它一直给我们发送垃圾信息,但是在这些信息中,也可能会有我们关心的内容。比如说我希望收到某个我关注的人的微博更新的消息,但是却不想微博一天到晚给我推一些垃圾信息。再过去,用户没有办法对这些信息做区分,要么同意接受所有信息,要么屏蔽所有信息,这也是Android通知功能的痛点。后来…… 通知渠道后来,Android8.0之后引入了通知渠道。 通知渠道就是每条通知都要属于一个对应的渠道。每个应用都可以自由地创建当前应用的通知渠道,但是这些通知渠道的控制权是掌握在用户手上的。用户可以自由地选择这些通知渠道的重要程度,是否响铃、是否振动或者是否要关...
阻塞队列与线程池机制
创建线程的方式 1.Thread 2.Runnable(实例化接口,重新run方法,放入Thread中执行) 为什么Callable方式不算? 首先,我们都知道创建线程都需要通过Thread,那么我们来看一下Thread的构造函数 可以看到,Thread构造函数中压根就没有Callable类型的参数 接着,我们再来看看Callable,Callable是继承自FutureTask 通过上面的源码截图,我们可以看出来Callable本质上还是Runnable的一种实现 CASCompare And Swap 提及CAS之前,我们先来提一下原子操作,原子操作就是一气呵成,中间不能被打断,学过操作系统的朋友应该和熟悉,没错,就类似于操作系统中的中断原语。 CAS原理利用了现代处理器都支持的CAS的指令,循环这个指令,直到成功为止。 会有两个重要的属性变量,旧值与新值(需要更改的值),每次进入前都会用旧值与内存中的变量值进行比较,如果相同,就会用新值替换内存中的变量值,否则将再次循环上述过程。 CAS的问题ABA问题什么是ABA问题呢? 就是旧值为A,被替换为新...
开发技巧(一)
前言 本章,小编来介绍一些省时省力的开发技巧,都是从前辈那学来的。平时做些小demo还感觉不到这些技巧的实用性,当遇到大项目时就感觉真香。 全局获取Context的技巧 我们在Android开发中难免会用到context,到底传哪个context呢?在Activity这样的类中可以传this(Activity自己就是个context),在自己创建的类中通过外部传入context,那这个context是谁?是Activity?最好不要这样,除非是涉及到跳转(这种情况只能用Activity),为什么呢?先看代码技巧,我再娓娓道来。 Android提供了一个Application类,每当程序启动的时候,系统就会自动将这个类进行初始化。而我们可以定制一个自己的Application类,以便于管理程序内一些全局的状态信息,比如全局Context。 class SkinApplication: Application() { companion object{ @SuppressLint("StaticFieldLeak") ...
括号问题
问题描述给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。 例如,给出n=3,解集为: “((()))”, “(()())”, “(())()”, “()()()”, “()(())” 数据范围:0<=n<=10 要求:空间复杂度O(n),时间复杂度O(2^n) 示例示例1 输入:1 返回值:[“()”] 示例2 输入:2 返回值:[“(())”,”()()”] 思路相当于一共n个左括号和n个右括号,可以给我们使用,我们需要依次组装这些括号。每当我们使用一个左括号之后,就剩下n-1个左括号和n个右括号给我们使用,结果拼在使用的左括号之后就行了,因此后者就是一个子问题,可以使用递归: 终止条件:左右括号都使用了n个,将结果加入数组。 返回值:每一级向上一级返回后续组装后的字符串,即子问题中搭配出来的括号序列。 本级任务:每一级就是保证左括号还有剩余的情况下,使用一次左括号进入子问题,或者右括号还有剩余且右括号使用次数少于左括号的情况下使用一次右括号进入子问题。 注意:我们需要保证左括号出现的次数比右括号多时我们再使用右...
按Z字形顺序打印二叉树
问题描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0≤n≤1500,树上每个节点的val满足∣val∣≤1500要求:空间复杂度:O(n),时间复杂度:O(n) 示例 示例1 输入:{1,2,3,#,#,4,5}输出: [[1],[3,2],[4,5]]说明:如题面解释,第一层是根节点,从左到右打印结果,第二层从右到左,第三层从左到右。 思路这其实就是一个升级版的层序遍历.观察其特点,无非就是奇数层和偶数层的输出顺序不一样. 这样就有了初步的解题思路,设置标识符flag(可以为整数型,也可以为boolean类型,整数类型无非就是对奇偶数的判断).其余的思路就是层序遍历的思路,在每遍历新的一层之前,改变flag的值!flag(这里以boolean类型为例),然后就是利用Collections.reverse(list)对链表进行翻转.详情可看代码 这里,小编再提一下我初次遇到这道题的思路,前面的几乎一样,就是在实现链表反转这里,小编不熟悉Java库,没想到还有Colection.reverse这个方法可以用.所以,小...
第一次上传测试
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post$ hexo new "My New Post" More info: Writing Run server$ hexo server More info: Server Generate static files$ hexo generate More info: Generating Deploy to remote sites$ hexo deploy More info: Deployment
模板
关于Hexo搭建遇到的小问题







