
Android
文章平均质量分 72
Boyikia
这个作者很懒,什么都没留下…
展开
-
源码 解读事件分发机制
文章目录源码角度 解读事件分发View 的事件分发 (View.dispatchTouchEvent())1.流程2.源码stopNestedScroll()onTouchEvent(MotionEvent event);1. performClickInternal();2.checkForLongClick()ViewGoup 事件分发( ViewGroup.dispatchTouchEven...原创 2020-04-27 13:51:36 · 458 阅读 · 1 评论 -
热修复原理分析
文章目录类加载机制类加载器双亲委派机制:类加载器加载步骤Android 中的类加载器PathClassLoader 和 DexClassLoader 对比Android 中的类加载分析BootClassLoader 引导类加载器:手机启动后,加载操作系统中的预加载类。PatchClassLoader :加载时序图热修复切入点解决方案类加载机制类加载器在类加载阶段,在虚拟机外部。通过一个类的...原创 2020-04-17 16:45:10 · 284 阅读 · 0 评论 -
LiveData+LifeCycle
谷歌组件LifeCycle:感知生命周期使用LiveData:绑定生命周期的数据持有类api注册观察者通知观察者SetValue(T data)postValue(T value)移除观察者LiveData 和ModelView 共同使用创建ViewModel注册观察者发送事件LifeCycle:感知生命周期LifeCycle : 绑定了activity的生命周期,通过注册观察者,可以用来监...原创 2020-03-16 11:43:53 · 654 阅读 · 0 评论 -
组件架构ViewModel
组件架构ViewModel1.What?2.使用方法1.创建需要保存的ViewModel2.创建Provider ,通过provider,获取保存在ViewModelStore 中的 ViewModel 实例3.ViewModel1. 关联application的ViewModel4.ViewModelProvider构造函数Factory获取ViewModel 实例5.ViewModelStor...原创 2020-03-15 13:12:49 · 356 阅读 · 0 评论 -
Window 源码解读(二)——View 的移除,添加,更新
通过 Window 源码解读(一),我们了解到。Activity 中 ,Window 的实际实现类是 PhoneWindow。WindowManager 继承自 ViewManager ,实际实现类是 WindowManagerImpl。Window 中,View 的添加是通过 WindowManagerGlobal 来完成本章我们来梳理View 的Tina阿基,移除,更新过程...原创 2019-12-16 16:46:31 · 937 阅读 · 0 评论 -
Window源码 解读(一)
Window 源码解读Window 是一个窗口概念。它是所有view 的载体。在Widow 机制中,会接触到这几个类如下面类图。我们按照这个思路,梳理一下源码WindowAbstract base class for a top-level window look and behavior policy. Aninstance of this class should be us...原创 2019-12-16 16:45:44 · 936 阅读 · 0 评论 -
AttachInfo(源码解析)
/** * A set of information given to a view when it is attached to its parent * window. */ final static class AttachInfo { //回调接口 interface Callbacks { ...原创 2019-12-12 11:56:48 · 816 阅读 · 0 评论 -
ViewParent(源码解析)
ViewParent定义将成为视图父类的类的职责。视图想要和父类视图交互的ApIpublic interface ViewParent { /** * Called when something has changed which has invalidated the layout of a * child of this view parent. Th...原创 2019-12-11 16:13:04 · 690 阅读 · 0 评论 -
Choreographer ——编舞者
Choreographer(编舞者)官方解释/** * Coordinates the timing of animations, input and drawing. * <p> * The choreographer receives timing pulses (such as vertical synchronization) * from the display ...原创 2019-11-16 18:10:14 · 810 阅读 · 1 评论 -
Android的16ms和垂直同步以及三重缓存
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-11-06 14:52:54 · 451 阅读 · 0 评论 -
Handler机制(View.post(Runnable action)原理)
Handler机制(View.post(Runnable action)原理)场景实际开发的过程中,我们一定会遇到.当在Activity 的onCreate() 中,通过 view.getTop()/ View.getWidth() 等方法来获取,控件的长宽等距离属性的时候。往往,事与愿违,获取的结果为0:。原因: 当我们在获取的时候,View 并没有完成,测量,布局等操作。因此,通过这些...原创 2019-11-05 16:01:41 · 567 阅读 · 0 评论 -
Handler机制(深入篇)
Handler机制(深入篇)反思通过上一节 “handler驱动模型",我们已经明白。Android系统,任何事件(小到滑动,大到 界面绘制)等,都是基于Looper 不停的循环来完成的。那么问题来了:当MessageQueue中,没有待处理的Message时,Looper还是一直进行着循环,那是不是很消耗cpu资源呢?同理,主线程也存在MainLooper,为什么UI线程并不会卡死呢?...原创 2019-11-05 10:47:22 · 283 阅读 · 1 评论 -
Binder机制——ServerManager进程 与 应用进程之间的通讯
ServerManager 进程 与 App 进程之间通讯通过上节 “Binder 的原理”,我们已经搞清楚了:应用进程中,直接经过 Binder 驱动的桥梁,根据 Binder的 名称 ,从 ServerManger 进程中,获取所需Binder 的代理,从而完成了跨进程通信。其实,仔细想来,这个过程,准确的说,是完成了2次跨进程的通信1.应用进程 和 所需要通讯的进程之间2. 应用进...原创 2019-10-25 15:09:42 · 357 阅读 · 0 评论 -
Binde机制——原理
原理Android 系统 是基于Linux 系统 ,因此想要深入了解Binder 机制。那么我们需要了解一部分Linux 知识。Linux预备知识进程隔离简单的说就是操作系统中,进程与进程间内存是不共享的。两个进程就像两个平行的世界,A 进程没法直接访问 B 进程的数据,这就是进程隔离的通俗解释。A 进程和 B 进程之间要进行数据交互就得采用特殊的通信机制:进程间通信(IPC)。...原创 2019-10-14 16:57:37 · 1010 阅读 · 1 评论 -
Binder机制——AIDL
通过上节手撸Binder ,我们已经初步了解了 Binder 的一个执行流程。接下来,我们主要探讨一下,在平时Binder 开发中,运用最多的AIDL 技术。AIDLAIDL 是一种 跨进程通讯技术,它的底层就是Binder。由于,手写Binder的工作量十分庞大,例如,Parcel 的操作,就搞得我们头很大。因此,android 通过AIDL 技术,屏蔽了底层的操作细节,让我们更方便的开...原创 2019-10-13 18:01:28 · 436 阅读 · 0 评论 -
Binder机制——初步认识
*Binder(译 “粘合剂”) **作为一种android 系统独有的 跨进程机制**,在跨进程通讯中起着举足轻重的作用。越是深入了解,越会感到豁然开朗*。虽然,网上前辈的资料已经十分丰富。本文将以一个菜鸟的角度,从每次学习和理解的认知深度,来梳理一遍。原创 2019-10-13 16:02:57 · 285 阅读 · 0 评论 -
解决 1.view.Layout() 失效 2. getTop() . getLeft() getTop() getBottom() 返回值为0
实践是检验真理的唯一标准问题缘由:自定义View开发的小伙伴,肯定会遇到。代码中onCreate() 方法中 ,直接调用view.layout()想要移动控件位置的时候,发现效果并没有达到预期的(控件一点都没有移动,尴尬),然而通过Value动画调用该方法的时候,是起作用的。why?why?。ValueAnimator animator=ValueAnimator.ofInt(0,4...原创 2019-03-09 17:38:38 · 1284 阅读 · 0 评论 -
PathMeasure
目录API总结:简单函数: PathMeasure(Path originalPath,boolean forceClosed); getLength() isClosed() nextContour() 重要函数(动画需要使用) getSegment(float startD,float stopD,...原创 2019-03-12 00:05:36 · 230 阅读 · 0 评论 -
支付宝支付成功动画(Path)
1.效果展示2.实现步骤public PathMeasureView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //1.关闭硬件加速(否则有问题) set...原创 2019-03-12 23:26:30 · 1564 阅读 · 0 评论 -
图片,文字优雅的添加阴影!
图片添加阴影,一般两种两种思路:1.layer_list (多张图重叠放置)。 2.setShadowLayer() (作用于 图片 ,或者文字)。 1.setShadowLayer();radius--------以下所有该参数都代表模糊半径,高斯模糊算法。 /** * * @param rad...原创 2019-03-22 00:12:50 · 554 阅读 · 0 评论 -
刮刮乐效果
BitmapShader+ path 实现“”刮刮乐“”效果步骤:准备一张尺寸不小于view 的图片,这样shader 不会使用填充模式package boyikia.com.thumbsview;import android.content.Context;import android.graphics.Bitmap;import android.graphi...原创 2019-03-26 23:26:47 · 760 阅读 · 0 评论 -
module 中添加 aar 文件
事故前提: app(主项目) 依赖了module( myLibrary),要在moudle中添加一个aar文件 1.将aar 添加到module的libs 。 2.告诉module 的gradle aar的文件位置。android { ...省略 repositories { flatDir(dirs: 'libs') }...原创 2019-03-27 15:11:19 · 841 阅读 · 0 评论 -
Shader
setShader( Shader mShader) 是Paint 的一个api。他主要是通过 Shader 的子类 实现一种着色的效果(给paint 设置一种绘图策略,类似于 颜色,阴影等)。BitmapShaderpublic BitmapShader(Bimap bimap,TitleModemodeX,TitleMode modeY);modeX:当View的宽...原创 2019-04-06 20:21:05 · 193 阅读 · 0 评论 -
Hander 机制(驱动模型理解)
一,概要Android 应用是基于事件驱动的,每个事件(UI绘制、滑动等)都会转化为一个系统消息,即 Message。然后,系统 looper通过维护一个消息队列 messageQueue来完成消息的分发处理. 二,介绍1.Message( 快递)public final class Message implements Parcelable { ...原创 2019-08-31 21:36:07 · 366 阅读 · 0 评论 -
Zygote进程预加载类文件
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * Yo...原创 2019-09-25 18:46:47 · 1168 阅读 · 0 评论 -
Zygote进程启动流程
zygote 进程简介zygote:是受精卵的意思,它是Android中的一个非常重要的守护进程服务(Daem Service),所有的其他Dalvik虚拟机进程都是通过zygote孵化(fork)出来的。Android应用程序是由Java语言编写的,运行在各自独立的Dalvik虚拟机中。如果每个应用程序在启动之时都需要单独运行和初始化一个虚拟机,会大大降低系统性能,因此Android首先创...原创 2019-09-25 19:34:10 · 1046 阅读 · 0 评论 -
SystemServer进程启动——出生篇
SystemServer 进程简介zygote:是受精卵的意思,它是Android中的一个非常重要的守护进程服务(Daem Service),所有的其他Dalvik虚拟机进程都是通过zygote孵化(fork)出来的。Android应用程序是由Java语言编写的,运行在各自独立的Dalvik虚拟机中。如果每个应用程序在启动之时都需要单独运行和初始化一个虚拟机,会大大降低系统性能,因此Andr...原创 2019-09-27 15:33:03 · 430 阅读 · 0 评论 -
SystemServer进程——发育篇
通过上篇文章的梳理。我们已经了解到,SystemServer 进程启动,是从Zygote 进程的 forkSystemServer () 方法开始,最终走到了,自己的main(入口) 方法。接下来,一起看下main中 ,都做了哪些骚操作?SystemServer 入口 main方法//SystemServer.javapublic static void main(String[]...原创 2019-10-08 17:16:08 · 389 阅读 · 0 评论 -
理解 Parcel 和 Parcelable
Parcel官方文档的语义是消息的容器。消息包括,数据和对象的引用。Parcel是android 系统特有的一套机制,可以将序列化之后的数据写入一个共享内存中,其他进程通过Parcel可以从这块共享内存读出字节流,并反序列化成对象。android 中 每个进程 都包括(自己本身的内存空间+部分共享内存空间),所以不同进程可以通过这段共享内存进行传递Parcel 打包好的数据(IPC过程...原创 2019-10-11 18:25:30 · 1047 阅读 · 0 评论 -
AndroidStudio 查看 源码报红
问题描述: AS关联源码后,发现有些代码仍然爆红,仔细发现 代码上面有 @hide标签。原因:@hide 注解----google开发者,不希望有些地方公开。解决方案,找到@hide源码替换掉 AS下载的android 源码。 android-hidden-apiandroid-hidden-api下载 对应的 android.jar 替换 本地SDK中对应的andr...原创 2019-02-19 23:50:58 · 2848 阅读 · 4 评论