Android Window 源码解析(四):Window 的删除机制

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

这篇将是 Window 系列的最后一篇了,主要来讲讲 Window 删除的机制原理。

其实相对于 Window 的添加和更新来说,删除也是换汤不换药的。也是通过 WindowSession 和 WindowManagerService 来完成这个步骤的。

Window的删除机制

我们删除 Window 的代码:

阅读更多

Android Window 源码解析(三): Window 的更新机制

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

本篇探究 Window 更新机制。其实 Window 的更新内部流程和添加 Window 并无什么差异,所以本篇可能会讲得比较简略。

但是还是值得我们去了解的,那么老死机开车了。

Window的更新机制

我们更新 Window 的代码:

阅读更多

Android Window 源码解析(一): DecorView

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

今天我们来讲讲 Window ,Window 代表着一个窗口。

比如在 Activity 中,我们可以设置自定义的视图 View ,其实 View 并不是直接附着在 Activity 上,而是 View 附着在 Window 上,Activity 又持有一个 Window 对象。可见,Window 是一个重要的角色,主要用来负责管理 View 的。而 Window 和 View 又是通过 ViewRootImpl 来建立联系的。

阅读更多

Android Window 源码解析(二): Window 的添加机制

注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。

Header

而今天就要来详细了解 Window 的添加机制了,到底在 WindowManager.addView 中做了什么事情?我们一起来看看吧!!

Window的添加机制

上面我们看到了在 makeVisible() 中调用了 wm.addView(mDecor, getWindow().getAttributes()) 将 DecorView 视图添加到 Window 上。

阅读更多

Android View 的工作原理

注:本文分析的源码基于 Android API 25

View绘制的起点

WindowManagerGlobal

addView(View view, ViewGroup.LayoutParams params, Display display, Window parentWindow)

WindowManagerGlobaladdView(View view, ViewGroup.LayoutParams params, Display display, Window parentWindow) 方法中,创建了 ViewRootImpl 对象,将 ViewRootImplDecorView 相关联:

阅读更多

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 {
...
}
阅读更多