自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HansChen的博客

博观而约取,厚积而薄发

  • 博客(33)
  • 收藏
  • 关注

原创 Android 12 - WMS 层级结构 && DisplayAreaGroup 引入

1. 简介在 Android 窗口管理中,所有的窗口都是以树形数据结构进行组织管理的,认知这棵 WMS 的树有助于我们理解窗口的管理和显示,同时,WMS 的层级也决定了其在 SurfaceFlinger 的层级结构,这恰恰决定了它的显示规则。2. WMS 顶层层级构建在 Android 12 中,所有窗口树形管理都继基于 WindowContainer, 每个 WindowContainer 都有一个父节点和若干个子节点,我们先看看框架中 WindowContainer 都有哪些类型:RootW

2021-11-25 09:39:05 4565 6

原创 Android 12 - 跟踪利器 WinScope

1. 简介在开发过程中,经常会遇到各种各样的窗口问题,比如动画异常、窗口异常、闪屏、黑屏、错位显示…以前对于这些问题,我们可以通过添加日志,调试分析代码等手段去解决,但这些 UI 问题往往出现在一瞬间,很难把握出现的时机,录制下来的日志往往也是巨大的,从海量的日志中提取有效的信息是一个枯燥且繁琐的事情。Android 也意识到了这个问题,WinScope 的出现有效的帮助我们跟踪窗口和显示问题。它向开发者提供一个可视化的工具,让开发者能使用工具跟踪整个界面的变化过程,让我们可以观察到细微的变化。迭代了

2021-11-25 09:37:39 7641

原创 Android 12 - Letterbox 模式

1. 简介随着越来越多大屏和折叠屏设备出现,很多应用并未对不同尺寸的设备进行 UI 适配,这时候应用选择以特定的宽高比显示(虽然 Google 不建议这这样做,官方还是希望开发者可以对不同的屏幕尺寸进行自适应布局~),当应用的宽高比和它的容器比例不兼容的时候,就会以 Letterbox 模式打开。Letterbox 模式下界面会以指定的比例显示,周围空白区域可以填充壁纸或者颜色。至于 Letterbox 的外观可受以下因素影响:config_letterboxActivityCornersRadi

2021-11-25 09:35:56 3413 5

原创 Android 列表滚动优化之 OverScroller 揭秘

1. 简介OverScroller 在 Android 系统中承担着为 ListView、RecyclerView、ScrollView 这些滚动控件计算实时滑动位置的任务,这些位置算法直接影响着每一次滚动的体验众所周知,Android 的动画体验远不如 iOS,即便如今 Android 已普遍支持 120Hz 高刷,体验起来也不是非常舒服。究其原因已经不是硬件性能限制,而是其中很多动画设计本身就有问题。苹果早在很早之前就发布了 Designing Fluid Interfaces 致力于打造一个丝滑流

2021-04-12 15:30:23 4188 7

原创 使用 Ninja 提升模块编译速度

1. 简介从 Android 7 开始,Android 源码编译时默认使用 Ninja,编译时,会先把 makefile 和 bp 转换成 ninja 再进行编译。这个转换过程非常慢(需要遍历处理所有关联的 makefile、bp 文件),即使只是通过 mm 或 mmm 编译某个模块,也会有很多因素触发 ninja 文件的重新生成,而这对基于源码开发的模块很不友好,编译好慢!2. 初识 nin...

2019-12-10 18:31:28 3174 3

原创 Android Q 深色模式(Dark Mode)源码解析

1. 简介随着 Android Q 发布,「黑暗模式」或者说是「夜间模式」终于在此版本中得到了支持,官方介绍见:https://developer.android.com/guide/topics/ui/look-and-feel/darktheme,再看看效果图:其实这个功能魅族在两年前就已支持,不得不说 Android 有点落后了,今天我们就来看看原生是怎么实现全局夜间模的吧2. 打开...

2019-10-22 09:59:33 12821 2

原创 如何顺滑地查看 Android Native 代码

1. 简介使用 Android Studio 查看 Android Framework 代码体验非常好,无论是索引还是界面都让人很满意,但是当你跟踪代码,发现进入 native 逻辑时,就会发现 Android Studio 对 native 代码的支持非常不好,不能索引不支持符号搜索不能跳转等,这些让人非常抓狂。那么如何能在 IDE 愉快地查看 native 代码呢?在 Windows 上,S...

2019-10-22 09:58:16 3240

原创 AOSP 编译和烧写

1. 简介很多 Android 开发者都会希望编译 Android 源码并刷进自己的手机里面,但网上教程很多都仅仅是告诉你 lunch、make 等等,但你手里有一台设备时却发现,你编译出的镜像由于驱动关系是不能直接烧进手机的。这里整理了一下步骤,帮助大家可以按照流程编译并烧写镜像。本篇文章以 Pixel 2 && Android 10 为例2. 环境准备这块没啥说,官方教...

2019-10-22 09:55:57 3306

原创 Protocol Buffers 3.0 技术手册

转载请标明出处:http://blog.csdn.net/shensky711/article/details/69696392 本文出自: 【HansChen的博客】简介proto3语法定义一个 Message定义多个 message 类型定义变量类型分配Tag指定变量规则注释保留变量不被使用默认值定义枚举 Enumerations如何引用其他 pro...

2017-04-08 18:15:27 22717

原创 设计模式之装饰模式

转载请标明出处:http://blog.csdn.net/shensky711/article/details/59185950 本文出自: 【HansChen的博客】概述情景举例丑陋的实现装饰模式概念介绍用装饰模式实现需求装饰模式的应用举例总结概述装饰模式(Decorator)也叫包装器模式(Wrapper),是指动态地给一个对象添加一些额外的职责,就增加功能来说装饰模式比生

2017-03-09 16:34:41 555

原创 设计模式之桥接模式

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53891127 本文出自: 【HansChen的博客】场景问题发送消息不用模式的解决方案实现简化版本实现发送加急消息有何问题继续添加特急消息的处理继续添加发送手机消息的处理方式小结一下出现的问题解决方案桥接模式来解决模式结构和说明桥接模式示例代码使用桥接

2017-03-01 22:55:53 618

原创 设计模式之代理模式

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53891127 本文出自: 【HansChen的博客】概述代理模式UML图代码远程代理延迟加载保护代理额外功能静态代理和动态代理概述我们执行一个功能的函数时,经常需要在其中写入与功能不是直接相关但很有必要的代码,如日志记录、信息发送、安全和事务支持等,这些枝节性

2016-12-27 00:14:42 661

原创 依赖注入利器 - Dagger ‡

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53715960 本文出自: 【HansChen的博客】概述声明需要注入的对象如何实例化出依赖Module的使用Component的使用Dagger的进阶使用Components之间的关系dependenciesSubcomponentsScopesSinglt

2016-12-17 22:53:36 2924

原创 Robolectric使用教程

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53561172 本文出自: 【HansChen的博客】概述如何使用为项目添加依赖指定RobolectricTestRunner为运行器什么是Shadow类Config配置配置SDK版本配置Application类指定Resource路径使用第三方Library

2016-12-10 21:24:32 10177 7

原创 设计模式之模板方法模式和策略模式

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53418034 本文出自: 【HansChen的博客】设计模式系列文章: 设计模式之工厂模式 设计模式之模板方法模式和策略模式概述我们知道,OOP三个基本特征是:封装、继承、多态。通过继承,我们可以基于差异编程,也就是说,对于一个满足我们大部分需求的类,可以创建它的一个子类并

2016-12-01 08:50:32 14315 1

原创 设计模式之工厂模式(Factory)

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53348412 本文出自: 【HansChen的博客】设计模式系列文章: 设计模式之工厂模式 设计模式之模板方法模式和策略模式概述根据依赖倒置原则,我们知道,我们应优先依赖抽象类而不是具体类。在应用开发过程中,有很多实体类都是非常易变的,依赖它们会带来问题,所以我们更应该依赖

2016-11-26 09:51:22 897

原创 Fragment源码分析

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53171248 本文出自: 【HansChen的博客】概述Fragment表示 Activity 中的行为或用户界面部分。您可以将多个 Fragment 组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个 Fragment。您可以将

2016-11-15 14:54:44 2450 1

原创 Fragment事务管理源码分析

转载请标明出处:http://blog.csdn.net/shensky711/article/details/53132952 本文出自: 【HansChen的博客】概述在Fragment使用中,有时候需要对Fragment进行add、remove、show、hide、replace等操作来进行Fragment的显示隐藏等管理,这些管理是通过FragmentTransaction进行事务管

2016-11-11 20:43:57 5525 1

原创 java动态代理

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52872249 本文出自: 【HansChen的博客】概述动态代理是java的一大特性,动态代理的优势就是实现无侵入式的代码扩展。它可以增强我们原有的方法,比如常用的日志监控,添加缓存等,也可以实现方法拦截,通过代理方法修改原方法的参数和返回值等。 要了解动态代理,我们需要先看

2016-10-20 14:24:51 1138 1

原创 Android分包MultiDex源码分析

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52845661 本文出自: 【HansChen的博客】概述Android开发者应该都遇到了64K最大方法数限制的问题,针对这个问题,google也推出了multidex分包机制,在生成apk的时候,把整个应用拆成n个dex包(classes.dex、classes2.dex、cl

2016-10-18 08:14:42 4041 7

原创 JNI教程与技术手册

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52806794 本文出自: 【HansChen的博客】概述对于JNI,有些童鞋在没有接触过的时候,可能会觉得比较复杂,但是其实当你真正去了解、去使用的时候,就会发现JNI的使用还是比较简单的,JNI本身提供了一系列的API让我们可以在native方法中操作java。JNI的使用无

2016-10-13 14:38:51 19717 3

原创 MockWebServer使用指南

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52771797 本文出自: 【HansChen的博客】MockWebServer介绍MockWebServer能帮我们做什么MockWebServer不能帮我们做什么MockWebServer环境配置MockWebServer一般步骤MockWebServer使用方法

2016-10-09 22:59:47 11078 1

原创 Mockito使用指南

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52771493 本文出自: 【HansChen的博客】mock和Mockito的关系Mockito使用举例Android Studio工程配置MockitoMockito使用方法验证行为Stubbing参数匹配验证准确的调用次数最多最少从未等为void方法抛异常

2016-10-09 22:43:25 32337 4

原创 ProGuard代码混淆详细攻略

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52770993 本文出自: 【HansChen的博客】ProGuard简介和工作流程PrgGuard环境配置和使用运行PrgGuard需要以下依赖如何运行ProGuardPrgGuard配置文件使用Entry points的概念会用到的指令参数说明Modifier

2016-10-09 21:59:48 22478 2

原创 Mock Server利器 - Moco

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52770686 本文出自: 【HansChen的博客】Moco介绍Moco独立运行所需环境如何运行Moco启动http服务启动https服务Moco HTTPs API配置如何在配置文件添加注释约定请求Body约定接口的uri约定请求参数约定请求方法约定HT

2016-10-09 21:24:24 22712 7

原创 Android Studio 2.2 NDK开发环境搭建

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52763192 本文出自: 【HansChen的博客】Android应用程序使用NDK的意义在这里就不说了,本文主要讲解如何在Android Studio 2.2下如何一步步搭建NDK开发环境。下载NDK和工具Android Studio2.2开始推荐开发者使用CMake去构建本

2016-10-09 08:47:15 12969 1

原创 Lua和C交互的简易教程

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52458051 本文出自: 【HansChen的博客】Lua栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出.在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数

2016-09-07 11:36:49 6194

原创 Lua快速入门

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52370850 本文出自: 【HansChen的博客】什么是LuaLua 是一门强大、快速、轻量的嵌入式脚本语言。它由巴西里约热内卢 Pontifical Catholic 大学的 PUC-Rio 团队 开发。 Lua 是一个 自由软件, 广泛应用于世界上无数产品和项目应用场景:

2016-08-30 16:52:39 1258

原创 Android最大方法数和解决方案

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52329035 本文出自: 【HansChen的博客】什么是64K限制和LinearAlloc限制64K限制随着Android应用功能的增加,代码量不断地增大,当应用方法数量超过了65536的时候,编译的时候便会提示: 这个Android著名的Dex 64k method数量上

2016-08-26 15:36:56 8362

原创 Makefile使用指南

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52231202 本文出自: 【HansChen的博客】什么是MakefileMakefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,文件之间有哪些依赖等。Makefile有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字

2016-08-17 15:15:36 1392

原创 利用keytool、openssl生成证书文件

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52225073 本文出自: 【HansChen的博客】用openssl指令逐步生成各个文件生成服务器密钥:openssl genrsa -out server_private.key 2048从密钥生成公钥(非必须):openssl rsa -in server_privat

2016-08-16 21:06:27 3391 1

原创 https安全在哪里,原理是什么?

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52214842 本文出自: 【HansChen的博客】Https通信基本过程在通信过程中,https是如何保证通信的安全的?如何加密信息,如何防止中间人攻击? 以下是客户端发起https请求的时候的流程:Created with Raphaël 2.1.0客户端客户端服务端服务

2016-08-15 21:19:27 5081 2

原创 Git使用和介绍-基础指令

转载请标明出处:http://blog.csdn.net/shensky711/article/details/52210625 本文出自: 【HansChen的博客】查看已有配置取消已有的配置设置用户名设置代理文件状态如何创建代码仓库忽略某些文件查看已暂存和未暂存的更新提交更新跳过使用暂存区域移除文件移动文件查看提交历史撤消操作修改最后一次提交取消已经暂存的文

2016-08-15 14:02:07 960

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除