- 博客(35)
- 收藏
- 关注
原创 SystemServer 进程启动过程
之前的文章《浅析Android系统启动过程》简要讲解了Android系统整体启动过程,今天我们看一下其中一个重要的过程:SystemServer进程是如何启动的。文中源码基于Android 8.0上篇文章《Zygote进程启动过程》提到Zygote启动过程中调用了startSystemServer启动SystemServer进程,我们继续跟进里面的代码看SystemServer进程是如何启动的。在startSystemServer中通过fork方式创建了SystemServer进程,并调用hand
2022-02-28 09:26:32 205
原创 Zygote进程启动过程
上篇文章《浅析Android系统启动过程》简要讲解了Android系统整体启动过程,今天我们看一下其中一个重要的过程:Zygote进程是如何启动的。文中源码基于Android 8.0概览Zygote进程是通过init进程启动起来的,我们直接看Zygote进程的入口函数,位于ZygoteInit类中的main方法:public class ZygoteInit { public static void main(String argv[]) { ZygoteServer z
2022-02-27 14:14:50 360
原创 设计模式(三)工厂方法模式
一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见,所以,在今天的讲解中,我们沿用第一种分类方法。简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。上篇文章《设计模式(二)简单工厂模式》讲了简单工厂模式,我们今天就来看一下工厂方法模式。工厂方法模式工厂方
2022-02-26 13:00:52 191
原创 设计模式(二)简单工厂模式
一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在 GoF 的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见,所以,在今天的讲解中,我们沿用第一种分类方法。简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。所以,我们今天只讲解前两种工厂模式。简单工厂(Simple Factory)定义:定义一个创建产品对象的工
2022-02-20 09:51:40 509
原创 Java高级特性(二)注解处理 之 3分钟写半个Retrofit框架
上篇文章《Java高级特性(一)注解的分类及使用》讲了注解相关的基础知识,但是基本的注解声明和使用,并不能发挥注解的真正效果。如果要让注解产生实际的作用,就需要搭配注解处理器来使用。至于为什么说写半个Retrofit框架,因为本文只涉及到Retrofit框架中关于注解处理的内容。我们先回顾一下Retrofit是怎么用的?(代码摘自Retrofit官网)第一步:定义一个接口,接口里面定义方法,使用@GET、@POST等注解标注我们定义的方法;public interface GitHubService
2022-02-19 09:12:26 884
原创 Java高级特性(一)注解的分类及使用
注解分类注解分为标准注解和元注解标准注解标准注解有以下几种:@Override:对覆盖超类中的方法进行标注,如果被标注的方法并没有实际覆盖超类中的方法,编译器会发错错误警告。@Deprecated:对不鼓励使用或已过时的方法进行标注,当开发人员对这些被标注的方法进行调用时,会显示该方法已过时的提示信息。@SuppressWarnings:选择性的取消特定代码段中的警告。@SafeVarargs:JDK 7 新增的注解,用来声明使用了可变长度参数的方法,其在与泛型类一起使用时会出现类型安全问题
2022-02-18 15:14:22 445
原创 Java多线程(二)Java内存模型
Java 内存模型(JMM)是一种抽象的概念,并不真实存在,它描述了一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。JVM中的堆内存用来存储对象实例,堆内存是被所有线程共享的运行时内存区域,因此它存在可见性问题。Java内存模型定义了线程和主存间的抽象关系:线程之间的共享变量存储在主存中,每个线程有一个私有的本地内存,本地内存中存储了该线程共享变量的副本。需要注意的是本地内存是Java内存模型的一个抽象概念,并不真实存在,它涵盖了缓存、写缓冲区、寄存
2022-02-17 21:52:51 269
原创 Java多线程(一)线程状态及线程创建方式
Java多线程编程作为每一个Android Coder都必须掌握的技术,今天我们就来聊一聊关于Java多线程的点点滴滴。Android沿用了Java的线程模型,一个Android应用创建时会开启一个线程,这个线程就是我们熟知的主线程,也叫UI线程。
2022-02-16 16:03:57 1305
原创 View体系(十一)View的draw流程
之前的文章《View体系(六)View工作流程入口》提到View的工作流程包括了measure、layout和draw的过程,今天我们就来看一下View的draw流程是怎样的。(注:文中源码基于 Android 12)View的draw流程很简单,源码里的注释官方也写的很清楚,我们看View的draw方法: public void draw(Canvas canvas) { ... // Step 1, draw the background, if need
2022-02-14 12:13:00 1522
原创 View体系(十)从LinearLayout分析View的布局流程
之前的文章《View体系(六)View工作流程入口》提到View的工作流程包括了measure、layout和draw的过程,上两篇文章《View体系(八)深入剖析View的onMeasure方法》和《View体系(九)从LinearLayout分析ViewGroup的测量流程》分别对View和ViewGroup的measure过程做了分析,今天我们就来看一下View的layout过程是怎样的。(注:文中源码基于 Android 12)先看View的layout方法:public void lay
2022-02-13 11:12:50 227
原创 View体系(九)从LinearLayout分析ViewGroup的测量流程
之前的文章《View体系(八)深入剖析View的onMeasure方法》我们深入分析了View的onMeasure方法,我们今天就来看一下ViewGroup的测量流程。(注:文中源码基于 Android 12)在View做测量时,会调用View的onMeasure方法,但是我们翻看ViewGroup的源码,并没有发现onMeasure方法,难道ViewGroup不用测量?显然不是,我们换一个类来看,LinearLayout继承自ViewGroup,我们从LinearLayout的源码中找到了熟悉的o
2022-02-12 10:22:51 201
原创 设计模式(一)单例模式
单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式结构图如下:Client为客户端,Singleton为单例类,Client通过调用Singleton.getInstance()方法获取实例对象。下面介绍常见的6种单例写法:饿汉式饿汉式的实现方式比较简单。在类加载的时候,instance
2022-02-11 12:18:27 762
原创 View体系(八)深入剖析View的onMeasure方法
之前的文章《View体系(六)View工作流程入口》介绍了View是从什么地方开始它的工作流程的,《View体系(七)理解 MeasureSpec》介绍了View在measure流程时的一个重要参数。有了上两篇的铺垫,我们就来看一下View的onMeasure方法到底做了什么。(注:文中源码基于 Android 12)在View做测量时,会调用View的onMeasure方法: protected void onMeasure(int widthMeasureSpec, int height
2022-02-10 18:39:18 277
原创 View体系(七)理解 MeasureSpec
MeasureSpec是View的内部类,MeasureSpec 封装了从父级传递到子级的测量要求。每个 MeasureSpec 代表对宽度或高度的要求。 MeasureSpec 由大小和模式两部分组成。更详细的说明请看 Google官方文档下面是MeasureSpec的源码:(基于Android 12) public static class MeasureSpec { private static final int MODE_SHIFT = 30; priv
2022-02-10 18:38:32 346
原创 View体系(六)View工作流程入口
View的工作流程,就是View进行measure、layout和draw的过程,本篇文章我们就来一起看一下View是如何开始他的工作流程的。(注:文中源码基于 Android 12)在上篇文章《View体系(五)熟悉又陌生的setContentView》中我们讲过Activity的结构,包括了Activity、PhoneWindow及DecorView。讲了PhoneWindow的创建和DecorView的创建,但此时DecorView还没有加载到PhoneWindow中,下面我们就从源码看一下D
2022-02-10 18:37:58 373
原创 View体系(五)熟悉又陌生的setContentView
为什么说setContentView熟悉呢?因为该方法是我们从入门Android开发就接触的一个方法,在我们写过的每一个Activity中都有他的身影。但为什么又说setContentView陌生呢?因为我们在日常的开发中只知道用,并没有深入分析该方法是怎么将我们传入的layout资源id变为一个可视的界面的。今天我们就来揭开这层神秘的面纱,扒一扒其中的原理(注:源码基于Android12)。因为我们日常开发的Activity最终都会继承自android.app.Activity,所以先看Activity
2022-02-10 18:37:16 684
原创 View体系(四)深入理解事件分发机制
上篇文章《View体系(三)初探View事件分发机制》对View的事件分发机制进行了粗略的讲解,并用代码实际探究了View事件的传递和处理过程。这篇文章就对View的事件分发机制进行一个更深入的讲解。之前提到过事件分发机制中的三个方法:dispatchTouchEvent(MotionEvent event)、onInterceptTouchEvent(MotionEvent ev)和onTouchEvent(MotionEvent event),那么这三个方法到底有什么样的关联呢?他们的关系其实可以用如
2022-02-10 18:36:40 140
原创 View体系(三)初探View事件分发机制
事件分发机制,简而言之就是Android对触摸事件的一系列传递和处理的机制。在了解分发机制之前需要对下面三个方法有个大概的了解:public boolean dispatchTouchEvent(MotionEvent event)用来进行事件的分发。如果有事件传递给当前View,那么此方法一定会被调用。返回值受当前View的onTouchEvent(MotionEvent event)和子View的dispatchTouchEvent(MotionEvent event)方法的影响,表示是否消耗当
2022-02-10 18:35:19 530
原创 View体系(二)View滑动的六种方式
在日常开发中,有时会遇到需要对View进行滑动处理的情况,今天我们就一起来看一下如何实现View的滑动。不管采用什么方式,实现思路基本是一致的:当触摸到View时,记下当前触摸点的坐标;当手指移动时,记下移动后触摸点的坐标,然后用两个坐标算出移动的偏移量,再利用偏移量来修改View的坐标。下面分别来讲解实现View滑动的6种方式。一、layout()layout()方法是View在进行布局流程时调用的一个方法,我们可以在移动View时调用次方法,不断的进行View的布局,达到滑动View的目的。具体
2022-02-10 18:34:40 525
原创 View体系(一)View基础知识
View 及ViewGroup在Android中,常用控件可大致分为两大类:View与ViewGroup。ViewGroup可包含多个View及ViewGroup,形成一个树状结构。需要注意的是ViewGroup也继承自View。View及ViewGroup组织结构如下:常见的可视控件都是View的子类,如:TextView ,Button ,ImageView 等。常见的布局控件都是ViewGroup的子类,如:LinearLayout ,FrameLayout , RelativeLayout
2022-02-10 18:33:51 230
原创 浅析Android系统启动过程
Android系统的启动流程是十分复杂的,但是作为应用层的开发人员来说,了解其大致流程即可。启动流程概览Android系统启动流程大致可以概括为以下的几个步骤:启动电源及系统启动引导程序BootLoader启动Linux内核启动init进程启动Zygote进程启动SystemServer进程启动Launcher启动关键进程在介绍启动流程之前,先来了解一下几个关键的进程及其作用:init进程init进程是Android系统中用户空间的第一个进程,进程号
2022-02-09 18:09:44 949
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人