Android源码相关
文章平均质量分 84
maove
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
EventBus源码分析
差不多两年没写博客了,最近想着要找工作了,打算复习下一些常用的开源库,也是这篇博客的由来~再贴一张官网的图。原创 2023-06-30 23:28:39 · 208 阅读 · 0 评论 -
InputManagerService 输入事件是如何分发到view(四)
在第二篇文章介绍了事件通过 connection->inputPublisher.publishMotionEvent 就可以发送到我们app的窗口,那么具体是如何分发的呢?以activity为例,我们打开一个activity就会创建一个PhoneWindow,setContentView会调用PhoneWindow的setContentView,PhoneWindow持有DecorView,DecorView是整个页面的根容器,我们传入的页面会被添加到其中的id为content的子容器中。可以参考原创 2021-03-27 23:52:04 · 305 阅读 · 0 评论 -
InputManagerService之ANR产生原因(三)
第一篇文章已经分析过,输入事件的分发最终会走到InputDispatcher的dispatchOnce方法。InputDispatcher#void InputDispatcher::dispatchOnce() { nsecs_t nextWakeupTime = LONG_LONG_MAX; { dispatchOnceInnerLocked(&nextWakeupTime); } // release lock}接着进入dispatchOnc原创 2021-03-23 23:39:21 · 509 阅读 · 1 评论 -
InputManagerService之事件分发(二)
通过第一篇文章的学习分析,知道触摸事件最终会走到InputDispatcher的notifyMotion方法。InputDispatcher.cpp#void InputDispatcher::notifyMotion(const NotifyMotionArgs* args) { // Just enqueue a new motion event. //将事件进一步封装 MotionEntry* newEntry = new MotionEntry(args->even原创 2021-03-22 23:06:32 · 233 阅读 · 0 评论 -
InputManagerService的启动过程(一)
从 SystemServer 的main方法开始==》SystemServer#public static void main(String[] args) { new SystemServer().run(); }private void run() { //引导服务:ActivityManagerService、PowerManagerService、PackageManagerService等服务 startBootstrapServices(); /原创 2021-03-21 18:24:13 · 513 阅读 · 1 评论 -
ActivityManagerService(AMS)启动流程
Android是基于Linux系统的,Linux启动后用户空间创建的第一个进程是init进程,而Zygote进程是init进程创建的,Zygote进程主要干两件事。1、孵化应用进程,我们app所在进程都是他fork出来的。2、创建SystemServer进程,我们常见的AMS、PMS、WMS等都是SystemServer进程中的服务。而在SystemServer中会启动许多的服务,包括ActivityManagerService、PackageManagerService等服务、PowerMana原创 2020-07-05 21:48:59 · 346 阅读 · 0 评论 -
Android 类加载机制源码分析
ClassLoader介绍任何一个 Java 程序都是由一个或多个 class 文件组成,在程序运行时,需要将 class 文件加载到 JVM 中才可以使用,负责加载这些 class 文件的就是 Java 的类加载机制。ClassLoader 的作用简单来说就是加载 class 文件,提供给程序运行时使用。每个 Class 对象的内部都有一个 classLoader 字段来标识自己是由哪个 ClassLoader 加载的。public final class Class<T>{ //原创 2020-06-17 23:07:01 · 538 阅读 · 0 评论 -
MediaPlayer源码分析(一)
对于创建MediaPlay我们可以使用create方式,也可以通过new MediaPlay的方式。下面以create方式来切入源码。public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder, AudioAttributes audioAttributes, int audioS...原创 2020-03-16 22:38:56 · 761 阅读 · 0 评论 -
Activity显示原理
Activity是通过它的setContentView方法来显示我们传入的布局的。 Activity#setContentView public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); //... }在se...原创 2019-12-07 16:20:58 · 381 阅读 · 0 评论 -
深入理解LayoutInflater
LayoutInflater在我们的日常开发中非常常见,通过它可以将我们的布局文件加载成一个View实例,那么LayoutInflater是如何将一个布局文件加载成View实例的呢?一、LayoutInflater的获取LayoutInflater的获取有三种方式:LayoutInflater.from(context)。context.getSystemService(Context....原创 2019-09-12 18:29:56 · 795 阅读 · 0 评论 -
Activity启动流程源码分析
不管我们从手机的主菜单进入应用程序的根Activity还是在应用内跳转到某个Activity都会调用startActivity方法。startActivity方法最终都会走到startActivityForResult方法。然后借助Instrumentation类的execStartActivity方法来执行startActivity的任务,需要注意的是该方法的第二个参数它是Applicati...原创 2019-07-12 21:22:26 · 1421 阅读 · 0 评论 -
Handler机制——同步屏障
一、消息种类关于Handler机制的基本原理不了解可以看这里: Handler机制源码解析。Message分为3中:普通消息、屏障消息和异步消息。我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息,因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息...原创 2019-08-10 10:10:19 · 9948 阅读 · 4 评论 -
Handler机制源码解析
一、基本Handler有很多方法可以用来发送消息,一系列的post、send方法。Handler机制通常用来进行异步消息处理,比如常见的在子线程得到结果通过Handler发送给出去,在主线程收到结果进行UI更新。1、通过sendMessage来发送消息通常发送消息可以这样做:这里只是发送了一个空的消息,Message提供了很多字段用于携带数据。Message msg=Messag...原创 2018-09-06 22:58:54 · 862 阅读 · 0 评论 -
Android——事件分发机制源码分析
当我们手指在屏幕上触碰就会产生一系列的MotionEvent,常见的点击屏幕会产生down-&amp;amp;amp;gt;up两个MotionEvent事件,手指在屏幕上滑动会产生down-&amp;amp;amp;gt;move&amp;amp;amp;gt;…&amp;amp;amp;gt;move-&amp;amp;amp;gt;up(按下手指,些许滑动、松开手指)。一个事件序列是以down事件开始,up事件结束。事原创 2019-01-11 12:15:54 · 447 阅读 · 0 评论 -
BroadcastReceiver工作流程分析
1、动态注册广播接收者//ContextImpl.javapublic Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { return registerReceiver(receiver, filter, null, null); }public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter f原创 2019-05-12 22:51:11 · 251 阅读 · 0 评论 -
ServiceManager源码分析
ServiceManager在Android系统中占有非常重要的地位,它是系统中所有服务的"大管家",我们熟知的AMS,PMS,PKM等都会被注册进ServiceManager,其他进程如果需要用这些系统服务,可以从ServiceManager中查询,ServiceManager运行在一个单独的进程,由init进程启动。原创 2018-12-21 20:33:25 · 303 阅读 · 0 评论 -
SystemServer进程启动分析
在前面关于Zygote启动的文章分析过,Zygote进程启动后会去启动SystemServer进程,本篇就来分析下SystemServer启动流程。//ZygoteInit.javapublic static void main(String argv[]) { .... if (startSystemServer) { startSystemServer(abiList, socketName, zygoteServer); } }//Zyg原创 2019-05-05 14:46:13 · 241 阅读 · 0 评论 -
Zygote进程的启动流程
Zygote进程被称为"进程孵化器",我们所有的应用进程,以及SystemServer进程都是由它创建的,Zygote进程是由init进程创建而来。在系统启动脚本system/core/rootdir/init.rc文件中,可以看到启动Zygote进程的脚本命令:import /init.${ro.zygote}.rc根据位数不同启动脚本有init.zygote32.rc、init.zygote32_64.rc、init.zygote64.rc、init.zygote64_32.rc。具体启动哪个脚原创 2019-04-27 13:04:25 · 345 阅读 · 0 评论 -
RxJava2源码分析——基本元素(一)
文章主要记录自己学习源码的过程,不会对如如何使用做过多介绍。自己是初学者,只是为了学习记录。基于:implementation ‘io.reactivex.rxjava2:rxandroid:2.1.0’implementation ‘io.reactivex.rxjava2:rxjava:2.2.3’介绍:a library for composing asynchronous ...原创 2019-04-12 22:55:52 · 194 阅读 · 0 评论 -
OkHttp源码分析——CallServerInterceptor拦截器
CallServerInterceptor拦截器是Okhttp框架内置拦截最后一个在上一个拦截器中客户端已经和服务器建立的连接,**CallServerInterceptor拦截器主要负责将请求发送给服务器,从服务器获取响应。**它的拦截方法如下:简述方法:首先会把不包含请求体的请求发送给客户端,如果有请求体还需要询问服务器是否愿意接收,服务器愿意接收再把请求体发过去,请求发送完成。从服务器获取...原创 2018-12-26 13:25:31 · 204 阅读 · 0 评论 -
AsyncTask源码分析
首先看下AsyncTask的类:它是一个抽象类。有两个非常重要的类成员 THREAD_POOL_EXECUTOR和sDefaultExecutor 分别代表着两个线程池。 THREAD_POOL_EXECUTOR用于真正执行我们的任务,sDefaultExecutor 用于将我们的许多任务串行化一个一个的交THREAD_POOL_EXECUTOR执行。在AsyncTask类加载的过程中对他们进行实...原创 2018-11-05 21:44:44 · 165 阅读 · 0 评论