Android Window 源码解析(四):Window 的删除机制
注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。
Header
这篇将是 Window 系列的最后一篇了,主要来讲讲 Window 删除的机制原理。
其实相对于 Window 的添加和更新来说,删除也是换汤不换药的。也是通过 WindowSession 和 WindowManagerService 来完成这个步骤的。
Window的删除机制
我们删除 Window 的代码:
Android Window 源码解析(四):Window 的删除机制
注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。
这篇将是 Window 系列的最后一篇了,主要来讲讲 Window 删除的机制原理。
其实相对于 Window 的添加和更新来说,删除也是换汤不换药的。也是通过 WindowSession 和 WindowManagerService 来完成这个步骤的。
我们删除 Window 的代码:
Android Window 源码解析(三): Window 的更新机制
注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。
本篇探究 Window 更新机制。其实 Window 的更新内部流程和添加 Window 并无什么差异,所以本篇可能会讲得比较简略。
但是还是值得我们去了解的,那么老死机开车了。
我们更新 Window 的代码:
Android Window 源码解析(一): DecorView
注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。
今天我们来讲讲 Window ,Window 代表着一个窗口。
比如在 Activity 中,我们可以设置自定义的视图 View ,其实 View 并不是直接附着在 Activity 上,而是 View 附着在 Window 上,Activity 又持有一个 Window 对象。可见,Window 是一个重要的角色,主要用来负责管理 View 的。而 Window 和 View 又是通过 ViewRootImpl 来建立联系的。
Android Window 源码解析(二): Window 的添加机制
注:本文解析的源码基于 API 25,部分内容来自于《Android开发艺术探索》。
而今天就要来详细了解 Window 的添加机制了,到底在 WindowManager.addView 中做了什么事情?我们一起来看看吧!!
上面我们看到了在 makeVisible()
中调用了 wm.addView(mDecor, getWindow().getAttributes())
将 DecorView 视图添加到 Window 上。
注:本文分析的源码基于 Android API 25
在 WindowManagerGlobal
的 addView(View view, ViewGroup.LayoutParams params, Display display, Window parentWindow)
方法中,创建了 ViewRootImpl
对象,将 ViewRootImpl
和 DecorView
相关联:
注:本文 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.
之前对 OkHttp 进行过源码分析了,那么今天就来讲讲 Retrofit 。
Retrofit 其实是对 OkHttp 进行了一层封装,让开发者对网络操作更加方便快捷。
相信绝大多数的 Android 开发者都有使用过的经历。其 restful 风格的编程俘获了众多人的心。
废话就不多讲了,下面就要对 Retrofit 进行源码解析。
本文解析的 Retrofit 基于 v2.3.0 ,GitHub 地址:https://github.com/square/retrofit
关于搜索栏,可以说各种 app 都有不同的样式。影响比较深刻的就有华为应用市场的搜索栏(同样,简书的搜索栏也是类似的)。
而今天,就是带你来实现华为应用市场那样的搜索栏。
我们先放上我们实现的效果图吧:
怎么样,想不想学?
我们先来简述一下实现的思路吧,其实并不复杂。
首先,在搜索栏还未打开时,先确定半径 R ,然后假设一个变量 offset 用来动态改变搜索栏的宽度。如图所示:
一开始就不多说废话了,主要因为工作时遇到了一些使用 OkHttp 拦截器的问题,所以在此特写这篇以作记录。
现如今,做 Android 开发在选择网络框架时,大多数都会首推 Retrofit 。Retrofit 以其简洁优雅的代码俘获了大多数开发者的心。
然而 Retrofit 内部请求也是基于 OkHttp 的,所以在做一些自定义修改 HTTP 请求时,需要对 OkHttp 拦截器具有一定了解。OkHttp 内部是使用拦截器来完成请求和响应的,利用的是责任链设计模式。所以可以说,拦截器是 OkHttp 的精髓所在。
在 Kotlin 中,class
默认是 public
的,所以平常都省略不写。
继承父类和实现接口都用 :
来表示。不同的是继承父类是带 ()
的,即表示构造器,比如上面的 AppCompatActivity()
;而接口则不需要 ()
。
举个例子:
1 | class MainActivity : AppCompatActivity(), View.OnClickListener { |