自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

droidYu

Keep Coding! Keep Writing!

  • 博客(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

原创 【学习笔记】登录和第三方授权

登录和第三方授权

2021-08-03 17:52:55 328

原创 【学习笔记】编码、压缩、加密、Hash、序列化和字符集

编码、压缩、加密、Hash、序列化和字符集

2021-08-03 17:06:59 552

原创 【学习笔记】HTTP、TCP/IP及HTTPS

HTTP、TCP/IP及HTTPS学习笔记

2021-08-01 22:43:51 117

原创 【Jetpack系列】DataBinding简单使用(Kotlin)

DataBinding学习笔记

2021-07-20 22:54:49 726 5

原创 【Jetpack系列】WorkManager简单使用(Kotlin)

WorkManager学习笔记

2021-07-19 22:51:48 254 2

原创 【Jetpack系列】Room简单使用(Kotlin)

Room学习笔记

2021-07-18 12:02:14 346

原创 【Jetpack系列】LiveData简单使用(Kotlin)

LiveData学习笔记

2021-07-17 17:36:29 1408

原创 【Jetpack系列】ViewModel简单使用(Kotlin)

ViewModel学习笔记

2021-07-17 10:17:32 649

原创 【Jetpack系列】Navigation简单使用(Kotlin)

Navigation学习笔记

2021-07-16 20:37:00 614 3

原创 【Jetpack系列】LifeCycle简单使用(Kotlin)

LifeCycle学习笔记

2021-07-16 11:58:11 1229

原创 RxJava简单使用(Kotlin)

RxJava学习笔记

2021-07-10 18:25:03 1047

原创 EventBus简单使用(Kotlin)

EventBus学习笔记

2021-07-10 17:13:20 356

原创 Retrofit简单使用(Kotlin)

Retrofit学习笔记

2021-07-10 16:21:34 402

原创 OkHttp简单使用(Kotlin)

OkHttp学习笔记

2021-07-09 17:25:18 6396 1

空空如也

空空如也

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

TA关注的人

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