Potato
Potato copied to clipboard
Read the fucking source code for the Android interview
# Android UI Optimization 这篇文章介绍 UI 的绘制优化 ## 基本认知 在 Android 中,如果页面的绘制 > 16ms, 那么页面就会有卡顿感,因此需要确认刷新帧率 > 60fps。 ## 检测工具 1. Layout Inspector:只能分析 Android Studio 中正在运行的 App 的视图布局结构 2. GPU 配置渲染工具:从...
# Android apk packaging process and signature algorithm [TOC] 这篇文章介绍安卓的打包流程和签名算法。 ## apk 打包流程 在平时开发的过程中,每天都会 run 很多次项目,AS 就会将 apk 自动打包,安装到手机上,那么需要经过哪些流程。 上述流程来自官网: 1. 编译器将所有的源代码(module, jar, aar, aidl)转换成 DEX(dalivk Executalble)文件,将所有其他内容转换成已编译资源。 2. APK 打包器将...
# when you type url into your browser and hit enter? [TOC] 至少二十年的经典面试题目。主要过程如下: 客户端获取URL - > DNS解析 - > TCP连接 - >发送HTTP请求 - >服务器处理请求 - >返回报文 - >浏览器解析渲染页面 - >...
# Android ByteDance Screen adaptation [TOC] 这篇文章讲解 Android 不同屏幕的适配方式 ## 传统的 dp 适配方式的缺点 android 中的各种各种单位渲染之前都会转为 px。 * px = density * dp * density = dpi / 160 * px...
# Android WebView Optimization [TOC] 以前项目做过相关的专项,优化 webview 的加载。 ## Html 加载流程  ### 加载流程各节点耗时分析优化 * WebView 创建初始化:由于首次初始化涉及到浏览器内核的加载初始化,明显会比第二次初始化慢很多。初始化后,即使 WebView 释放,但部分共用的全局服务/资源对象未释放,而第二次初始化不需要重新生成,因此会快很多。 * 方案:提前初始化全局 webview。或者维护一个 webview pool 进行复用。 * 资源文件下载耗时:弱网情况下,下载网页资源耗时,白屏时间过程。 * 网页资源压缩,CND 加速处理,缩短请求耗时。...
# Kotlin ### 知识点 #### 为什么不需要 findViewbyid Kotlin 会自动生成类似 findViewById() 的方法:findCachedViewById(),在这个方法里面创建一个 HashMap 缓存每次查找到的 View,避免每次调用 View 的属性或方法时都会重新调用findCachedViewById()进行查找。具体查找流程:在findCachedViewById()中,会先通过缓存 HashMap 的 get 方法来获取控件, get() 中传入的 key 即控件 ID,由于第一次 get 的值为 null ,因此会调用findViewById() ,并把控件...
# OKhttp(2): Source code analysis(1) [TOC] 上一篇文章介绍了 [okhttp 的基本使用](https://github.com/yunshuipiao/Potato/issues/4),以及官方 wiki 对于okhttp 的部分解释。 这一篇文章主要从源码来分析 okhttp,理解过程,不求每个细节。 使用 okhttp 最新代码,已从 java 转为 kotlin, 为okhttp4 的第一个版本 ## 请求过程 这里还有从官方的 get 和 post 请求作为例子: ```kotlin...
# AAC: LiveData [TOC] 对比 mvp 而言,使用大量的接口在 逻辑层和UI 层之间通信,AAC 则使用 livedata 进行通信。 ## 基本使用 下面简单的演示如何在两者进行通信: ```java // MainActivity.java override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) bindData() initView()...
# AAC: ViewModel [TOC] 前一篇文章介绍了 AAC 最基本的功能,处理生命周期。 在之前的 mvc 开发模式中,与 UI 无关的逻辑都写在 Activity 或者 Fragment 中,文件过大且不利于测试;后来处理 mvp 分离逻辑部分,但是需要处理生命周期的问题,对状态的大量判断和空的判断。有了 lifecycle 处理生命周期,所以 这里的 viewmodel 可以用来纯粹的处理逻辑部分,并用来保存 UI 中的数据和状态。 > ViewModel是存储UI相关数据并不会因为旋转而销毁的类。 ## 简单认识 这里还是从...