Android OkHttp 源码解析

Header

注:本文 OkHttp 源码解析基于 v3.8.1 。

OkHttp in GitHub:https://github.com/square/okhttp

现如今,在 Android 开发领域大多数都是选择以 OkHttp 作为网络框架。

然而,简单地会使用 OkHttp 并不能让我们得到满足。更深层次的,我们需要阅读框架的源码,才能用起来得心应手,融会贯通。

An HTTP & HTTP/2 client for Android and Java applications.

阅读更多

Android Retrofit 源码解析

Header

之前对 OkHttp 进行过源码分析了,那么今天就来讲讲 Retrofit 。

Retrofit 其实是对 OkHttp 进行了一层封装,让开发者对网络操作更加方便快捷。

相信绝大多数的 Android 开发者都有使用过的经历。其 restful 风格的编程俘获了众多人的心。

废话就不多讲了,下面就要对 Retrofit 进行源码解析。

本文解析的 Retrofit 基于 v2.3.0 ,GitHub 地址:https://github.com/square/retrofit

阅读更多

Android 可以伸缩的搜索栏实现

关于搜索栏,可以说各种 app 都有不同的样式。影响比较深刻的就有华为应用市场的搜索栏(同样,简书的搜索栏也是类似的)。

而今天,就是带你来实现华为应用市场那样的搜索栏。

我们先放上我们实现的效果图吧:

demo效果图

怎么样,想不想学?

我们先来简述一下实现的思路吧,其实并不复杂。

首先,在搜索栏还未打开时,先确定半径 R ,然后假设一个变量 offset 用来动态改变搜索栏的宽度。如图所示:

示意图

阅读更多

Android 实现 OkHttp 的拦截器

00:00

一开始就不多说废话了,主要因为工作时遇到了一些使用 OkHttp 拦截器的问题,所以在此特写这篇以作记录。

现如今,做 Android 开发在选择网络框架时,大多数都会首推 Retrofit 。Retrofit 以其简洁优雅的代码俘获了大多数开发者的心。

然而 Retrofit 内部请求也是基于 OkHttp 的,所以在做一些自定义修改 HTTP 请求时,需要对 OkHttp 拦截器具有一定了解。OkHttp 内部是使用拦截器来完成请求和响应的,利用的是责任链设计模式。所以可以说,拦截器是 OkHttp 的精髓所在。

阅读更多

Android Kotlin入门二

class

在 Kotlin 中,class 默认是 public 的,所以平常都省略不写。

继承父类和实现接口都用 : 来表示。不同的是继承父类是带 () 的,即表示构造器,比如上面的 AppCompatActivity() ;而接口则不需要 ()

举个例子:

1
2
3
class MainActivity : AppCompatActivity(), View.OnClickListener {
...
}
阅读更多

Android Kotlin 入门一

Android Studio 配置

Android Studio 3.0 版本已经默认添加了对 Kotlin 的支持,所以以下 Android Studio 配置是针对于 3.0 版本以下的。

  1. 安装 Kotlin 插件

    Kotlin Plugin

  2. 将 Java 代码转化为 Kotlin 代码

阅读更多

Android 玩转卡片式滑动效果

首先面临的问题就是关于实现 View 上的考虑。毫无疑问,

RecyclerView 是最佳选择!

究其原因,第一,RecyclerView 是自带 Item View 回收和重用功能的,就不需要我们考虑这个问题了;第二,RecyclerView 的布局方式是通过设置 LayoutManager 来实现的,这样就充分地把布局和 RecyclerView “解耦”开来了。而 LayoutManager 是可以通过自定义的方式来实现的。这恰恰是我们想要的!!!再说一点,这也正是不选用 ListView 的原因之一。

下面,我们就开始动手了。带你见证奇迹的时刻。

CardLayoutManager

创建 CardLayoutManager 并继承自 RecyclerView.LayoutManager 。需要我们自己实现 generateDefaultLayoutParams() 方法:

阅读更多

Android android-architecture todo-mvp源码分析

Android 架构一直都是热门话题,从一开始的 MVC ,到目前火爆的 MVP ,再到方兴未艾的 MVVM 。并不能说哪一种架构最好,因为这些架构都顺应了当时开发的趋势。

自从 2015 下半年来,MVP 渐渐崛起成为了现在普遍流行的架构模式。但是各种不同实现方式的 MVP 架构层出不穷,也让新手不知所措。而 Google 作为“老大哥”,针对此现象为 Android 架构做出了“规范示例”:android-architecture

目前已有的架构示例如下图所示:

stable sample

阅读更多

Android NotificationListenerService

要实时监听设备的通知栏消息,并可以捕获到通知的内容,然后进行对应的操作。刚看到这个需求的时候,脑子里第一反应就是使用 AccessibilityServiceAccessibilityService 支持的事件监听类型中有 TYPE_NOTIFICATION_STATE_CHANGED ,该事件类型就是用来监听通知栏消息状态改变的,众多的抢红包插件利用的就是这个原理。

之后在 Github 上看到了 qianghongbao 这个抢红包的项目,发现代码里面有一个 QHBNotificationService 继承了 NotificationListenerService ,这个 NotificationListenerService 极大地引起了我的兴趣。查了一下资料,发现 NotificationListenerService 是在 Android 4.3 (API 18)时被加入的,作用就是用来监听通知栏消息。并且官方建议在 Android 4.3 及以上使用 NotificationListenerService 来监听通知栏消息,以此取代 AccessibilityService

阅读更多

Android RecyclerView 实现拖拽排序和侧滑删除

在平时开发应用的时候,经常会遇到列表排序、滑动删除的需求。如果列表效果采用的是 ListView 的话,需要经过自定义 View 才能实现效果;但是如果采用的是 RecyclerView 的话,系统 API 就已经为我们提供了相应的功能。

接下来,我们就来看一下怎么用系统 API 来实现排序和删除的效果。

创建 ItemTouchHelper

创建一个 ItemTouchHelper 对象,然后其调用 attachToRecyclerView 方法:

阅读更多