<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[CallmeZhe的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/CallmeZhe</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; CallmeZhe]]></copyright><item><title><![CDATA[Android应用程序窗口的绘制过程，即Surface的渲染过程]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/114057891</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/114057891</guid><author>CallmeZhe</author><pubDate>Thu, 16 Jun 2022 16:21:15 +0800</pubDate><description><![CDATA[Android应用程序窗口的绘图表面在创建完成之后，我们就可以从上到下地绘制它里面的各个视图了，即各个UI元素了。不过在绘制这些UI元素之前，我们还需要从上到下地测量它们实际所需要的大小，以及对它们的位置进行合适的安排，即对它们进行合适的布局。在本文中，我们就将详细地分析Android应用程序窗口的测量、布局以及绘制过程。


从前面Android应用程序与SurfaceFlinger服务的关系概述和学习计划这一系列的文章可以知道，Android应用程序窗口请求SurfaceFlinger服务创建了一个绘.]]></description><category></category></item><item><title><![CDATA[Android应用程序窗口Activity与SurfaceFlinger服务的连接过程，即Surface的创建过程]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/114021747</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/114021747</guid><author>CallmeZhe</author><pubDate>Sat, 02 Apr 2022 14:24:23 +0800</pubDate><description><![CDATA[在前文中，我们分析了应用程序窗口连接到WindowManagerService服务的过程。在这个过程中，WindowManagerService服务会为应用程序窗口创建过一个到SurfaceFlinger服务的连接。有了这个连接之后，WindowManagerService服务就可以为应用程序窗口创建绘图表面了，以便可以用来渲染窗口的UI。在本文中，我们就详细分析应用程序窗口的绘图表面的创建过程。


我们知道，每一个在C++层实现的应用程序窗口都需要有一个绘图表面，然后才可以将自己的UI表现出来。这个绘.]]></description><category></category></item><item><title><![CDATA[Android应用程序窗口与WindowManagerService服务的连接过程，即WindowState的创建过程]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113989896</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113989896</guid><author>CallmeZhe</author><pubDate>Wed, 29 Dec 2021 10:16:59 +0800</pubDate><description><![CDATA[Activity组件在其窗口对象和视图对象创建完成之后，就会请求与WindowManagerService建立一个连接，即请求WindowManagerService为其增加一个WindowState对象，用来描述它的窗口状态。在本文中，我们就详细分析Activity组件与WindowManagerService的连接过程。


我们从两方面来看Activity组件与WindowManagerService服务之间的连接。一方面是从Activity组件到WindowManagerService服务的连接，.]]></description><category></category></item><item><title><![CDATA[Android应用程序窗口Activity的视图View的创建过程，即DecorView的创建过程]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113974606</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113974606</guid><author>CallmeZhe</author><pubDate>Fri, 26 Nov 2021 17:22:13 +0800</pubDate><description><![CDATA[从前文可知道，每一个Activity组件都有一个关联的Window对象，用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象，用来描述应用程序窗口的视图。应用程序窗口视图是真正用来实现UI内容和布局的，也就是说，每一个Activity组件的UI内容和布局都是通过与其所关联的一个Window对象的内部的一个View对象来实现的。在本文中，我们就详细分析应用程序窗口视图的创建过程。


应用程序窗口内部所包含的视图对象的实际类型为DecorView。DecorView类继承了View类，是.]]></description><category></category></item><item><title><![CDATA[Android应用程序窗口(Activity)的窗口对象(Window)创建过程，即PhoneWindow的创建过程]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113970042</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113970042</guid><author>CallmeZhe</author><pubDate>Thu, 21 Oct 2021 16:06:44 +0800</pubDate><description><![CDATA[在前文中，我们分析了Android应用程序窗口的运行上下文环境的创建过程。由此可知，每一个Activity组件都有一个关联的ContextImpl对象，同时，它还关联有一个Window对象，用来描述一个具体的应用程序窗口。由此又可知，Activity只不过是一个高度抽象的UI组件，它的具体UI实现其实是由其它的一系列对象来实现的。在本文中，我们就将详细分析Android应用程序窗口对象的创建过程。


可以知道，在PHONE平台上，与Activity组件所关联的窗口对象的实际类型为PhoneWindow，.]]></description><category></category></item><item><title><![CDATA[设计模式汇总，对应Android系统源码举例，保你一次看个够]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/117561151</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/117561151</guid><author>CallmeZhe</author><pubDate>Wed, 22 Sep 2021 14:10:20 +0800</pubDate><description><![CDATA[1

设计模式的七大原则



尽量用最简单的话描述



1、开闭原则（Open Closed Principle）



对类的扩展是开放，对修改关闭。


在程序需要扩展的时候，对于一个类，不要去修改原来的代码，而是通过继承的方式去扩展这个类。


目的：降低维护风险。



2、单一职责原则（Single Responsiblity Principle）



每个类应该且只有一个职责。


目的：提高可读性。



3、里式替换原则（Liskov Substitution Princi...]]></description><category></category></item><item><title><![CDATA[Android应用程序窗口Activity的运行上下文Context的创建过程，即创建ContextImpl的创建过程]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113940874</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113940874</guid><author>CallmeZhe</author><pubDate>Tue, 17 Aug 2021 09:29:41 +0800</pubDate><description><![CDATA[我们知道，Android应用程序窗口的运行上下文环境是通过ContextImpl类来描述的，即每一个Activity组件都关联有一个ContextImpl对象。ContextImpl类继承了Context类，它与Activity组件的关系如图1所示：


图1 ContextImpl类与Activity类的关系图

这个类图在设计模式里面就可以称为装饰模式。Activity组件通过其父类ContextThemeWrapper和ContextWrapper的成员变量mBase来引用了一个ContextImp.]]></description><category></category></item><item><title><![CDATA[安卓性能优化--启动优化（主要根据冷启动过程，从用户操作直观感知与程序代码运行流程两个维度分析）]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/116603799</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/116603799</guid><author>CallmeZhe</author><pubDate>Wed, 14 Jul 2021 13:46:34 +0800</pubDate><description><![CDATA[谈到性能优化这个事情，不像我们开发新需求或者修BUG那样，能很快得到立竿见影的效果，因为涉及到的技术点，代码运行逻辑，产品功能等比较冗杂，反而是充满不确定性。而且优化后的成效也可能只比优化前提高百分之几，所以这也是个细活儿，需要一点一点的扣，要学会抓大放小，优化前认真审视各方面，根据产品周期，做出最适合的优化方案。对于我们研发人员来说，APP的启动速度就是我们的“门面”，这段时间的长短，会被用户深刻感知到，这个第一印象很是重要，会直接影响用户留存和转化等核心数据。


优化之前，先要搞清楚整个启动过程中都.]]></description><category></category></item><item><title><![CDATA[Android性能优化--IO 优化（ IO基本知识：应用程序、文件系统和磁盘，三种IO方式及适用场景，多线程阻塞IO和NIO）]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/117283124</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/117283124</guid><author>CallmeZhe</author><pubDate>Thu, 24 Jun 2021 17:55:59 +0800</pubDate><description><![CDATA[目录

I/O 的基本知识

1. 文件系统

2. 磁盘

Android I/O

1. Android 闪存

2. 两个疑问

疑问一：文件为什么会损坏？

疑问二：I/O 有时候为什么会突然很慢？

不同的场景使用不同的I/O方式

I/O 的三种方式

1. 标准 I/O

2. 直接 I/O

3. mmap

多线程阻塞 I/O 和 NIO

1. 多线程阻塞 I/O

2. NIO

小文件系统

常见不良现象

1. 主线程 I/O

2. 读写 Buffer 过小

3. 重复读

4]]></description><category></category></item><item><title><![CDATA[记录常用的三方库和牛b的资料]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/117951372</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/117951372</guid><author>CallmeZhe</author><pubDate>Wed, 16 Jun 2021 11:08:41 +0800</pubDate><description><![CDATA[https://github.com/tiann/FreeReflection
]]></description><category></category></item><item><title><![CDATA[抖音创始人张一鸣：10年面试2000人，我发现混的好的人，全都有同一个特质]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/117554364</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/117554364</guid><author>CallmeZhe</author><pubDate>Sat, 05 Jun 2021 20:37:31 +0800</pubDate><description><![CDATA[张一鸣 ，今日头条创始人，2013年，他先后入选《福布斯》“中国30位30岁以下的创业者”和《财富》“中国40位40岁以下的商业精英”。



]]></description><category></category></item><item><title><![CDATA[直播与音视频通话有啥不一样？]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/117553579</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/117553579</guid><author>CallmeZhe</author><pubDate>Fri, 04 Jun 2021 11:23:35 +0800</pubDate><description><![CDATA[直播

直播是1个主播+N个观众（支持千万级）组成的在线直播。

主播将音视频数据上传到推流服务器。


	推流服务器和拉流服务器都是处于内网，推流服务器将主播的流传输到拉流服务器。
	
]]></description><category></category></item><item><title><![CDATA[Android应用程序是如何请求SurfaceFlinger服务渲染一个Surface的？]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113877824</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113877824</guid><author>CallmeZhe</author><pubDate>Thu, 03 Jun 2021 10:58:15 +0800</pubDate><description><![CDATA[在前面一篇文章中，我们分析了Android应用程序请求SurfaceFlinger服务创建Surface的过程。有了Surface之后，Android应用程序就可以在上面绘制自己的UI了，接着再请求SurfaceFlinger服务将这个已经绘制好了UI的Surface渲染到设备显示屏上去。在本文中，我们就将详细分析Android应用程序请求SurfaceFlinger服务渲染Surface的过程。Android应用程序在请求SurfaceFlinger服务渲染一个Surface之前，首先要将该Sur...]]></description><category></category></item><item><title><![CDATA[Android开发重点---差值器和估值器，使用动画的注意事项，Drawable、Canvas、Bitmap关系，Window的内部机制,Activity,Dialog,Toast的Window创建]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113601724</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113601724</guid><author>CallmeZhe</author><pubDate>Tue, 18 May 2021 10:03:25 +0800</pubDate><description><![CDATA[差值器和估值器

差值器

一般指时间差值器TimeInterpolator，是设置 属性值 从初始值过渡到结束值 的变化规律，比如匀速，加速，减速等等。可以通过xml属性和java代码设置。系统默认的差值器是AccelerateDecelerateInterpolator，即先加速后减速。


//匀速插值器设置
android:interpolator="@android:anim/linear_interpolator"
或
alphaAnimation.setInterpolator(new Lin]]></description><category></category></item><item><title><![CDATA[Android应用程序是如何请求SurfaceFlinger服务创建一个Surface的？]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113758084</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113758084</guid><author>CallmeZhe</author><pubDate>Mon, 10 May 2021 17:51:09 +0800</pubDate><description><![CDATA[连接上SurfaceFlinger服务之后，Android应用程序就可以请求SurfaceFlinger服务创建Surface。而当有了Surface后，Android应用程序就可以用来渲染自己的UI了。在本文中，我们将详细分析Android应用程序请求SurfaceFlinger服务创建Surface的过程。


在讲述Android应用程序请求SurfaceFlinger服务创建Surface之前，我们首先了解一个Surface是由什么组成的。我们可以将Surface理解为一个绘图表面，Androi..]]></description><category></category></item><item><title><![CDATA[Android应用程序与SurfaceFlinger服务之间的共享UI元数据（SharedClient）的创建过程分析]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113755838</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113755838</guid><author>CallmeZhe</author><pubDate>Mon, 19 Apr 2021 18:00:49 +0800</pubDate><description><![CDATA[Android应用程序成功连接上SurfaceFlinger服务之后，还需要一块匿名共享内存来和SurfaceFlinger服务共享它的UI元数据，以便使得SurfaceFlinger服务可以正确地为它创建以及渲染Surface。在本文中，我们将详细地分析这块用来保存UI元数据的匿名共享内存的创建过程。


用来保存Android应用程序的UI元数据的匿名共享内存最终是被结构化为一个SharedClient对象来访问的。每一个与UI有关的Android应用程序进程有且仅有一个SharedClient对象，.]]></description><category></category></item><item><title><![CDATA[Android应用程序与SurfaceFlinger服务的连接过程分析]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113753829</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113753829</guid><author>CallmeZhe</author><pubDate>Tue, 23 Mar 2021 15:34:08 +0800</pubDate><description><![CDATA[前文在描述Android应用程序和SurfaceFlinger服务的关系时提到，每一个有UI的Android应用程序都需要与SurfaceFlinger服务建立一个连接，以便可以通过这个连接来请求SurfaceFlinger服务为它创建和渲染Surface。在本文中，我们将以Android系统的开机动画应用程序为例，详细描述Android应用程序是如何与SurfaceFlinger服务建立连接的。


Android系统的开机动画是由应用程序bootanimation来实现的，它位于/system/b...]]></description><category></category></item><item><title><![CDATA[Android应用程序与SurfaceFlinger服务关系概述]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113752886</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113752886</guid><author>CallmeZhe</author><pubDate>Tue, 09 Mar 2021 14:45:25 +0800</pubDate><description><![CDATA[SurfaceFlinger服务负责绘制Android应用程序的UI，它的实现相当复杂，要从正面分析它的实现不是一件容易的事。既然不能从正面分析，我们就想办法从侧面分析。说到底，无论SurfaceFlinger服务有多复杂，它都是为Android应用程序服务的，因此，我们就从Android应用程序与SurfaceFlinger服务的关系入手，来概述和制定SurfaceFlinger服务的学习计划。


 SurfaceFlinger服务运行在Android系统的System进程中，它负责管理Andr...]]></description><category></category></item><item><title><![CDATA[Android开发中如何编写高效代码及性能微优化]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113642015</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113642015</guid><author>CallmeZhe</author><pubDate>Mon, 01 Mar 2021 09:38:50 +0800</pubDate><description><![CDATA[目录



在性能优化工作中，选择正确的算法和数据结构应始终是您的首要任务。

始终衡量性能

避免创建不必要的对象

静态优先于虚拟

对常量使用 static final

使用增强型 for 循环语法

对于私有内部类，考虑使用包访问权限，而非私有访问权限

避免使用浮点数

了解和使用库

谨慎使用原生方法

性能误区

在性能优化工作中，选择正确的算法和数据结构应始终是您的首要任务。

编写高效代码有两个基本规则：

不需要做的工作就不要做
	如果可以避免，就不要分配内存

在微优化 Andro.]]></description><category></category></item><item><title><![CDATA[Java中类的初始化与实例化总结(类初始化的触发时机,类的实例化触发时机,new一个对象的过程)]]></title><link>https://blog.youkuaiyun.com/CallmeZhe/article/details/113139445</link><guid>https://blog.youkuaiyun.com/CallmeZhe/article/details/113139445</guid><author>CallmeZhe</author><pubDate>Wed, 10 Feb 2021 08:47:39 +0800</pubDate><description><![CDATA[全是干货，一网打尽类的基础知识！先看看下面的问题都能回答上来吗？


	描述new一个对象的过程，并结合例子说明。
	
	
	类初始化的触发时机。
	
	
	多线程进行类的初始化会出问题吗？
	
	
	类的实例化触发时机。
	
	
	&lt;clinit&gt;()方法和&lt;init&gt;()方法区别。
	
	
	在类都没有初始化完毕之前，能直接进行实例化相应的对象吗?
	
	
	类的初始化过程与类的实例化过程的异同？
	
	
	一个实例变量在对象初始化的过程中会被赋值几次？
	
描述new一个...]]></description><category></category></item></channel></rss>