Android 源码学习
文章平均质量分 88
yuminfeng728
这个作者很懒,什么都没留下…
展开
-
android 6.0 关于SystemUI 的启动流程浅析(一)
SystemUI一直都是andorid系统中重要的组成部分,针对它的分析网上例子也非常多,但主要是较早期版本。目前工作中经常遇到关于的它内容,于是就对它的流程做一个浅要分析,作为自己学习的心得体会。以下内容针对的是6.0系统。关于SystemUI里面细节知识点非常多,无法将所有内容分析到位,不足之处还请指正。原创 2016-02-15 10:02:58 · 3926 阅读 · 0 评论 -
Android 从程序启动startActivity到生命周期变化的过程
在上篇文章中,我们了解了Android应用程序是如何启动的,也介绍了具体的流程调用。知道了整个APP的启动过程都是由ActivityThread类中执行的,而且启动中的生命周期的变化都是通过Handler消息机制来完成的。那么这篇将要具体介绍从启动到startActivity时生命周期变化的过程。 从上篇知道执行了ApplicationThread中scheduleLaunchActivity,...原创 2018-07-31 11:00:47 · 1883 阅读 · 0 评论 -
Android 程序在系统中如何完成启动
一段程序的调用都有它的程序入口,众所周知Java程序的入口在main方法。作为Android来说应用程序的启动是通过 ActivityThread 类 来执行的。系统中对于该类的介绍如下:该类是管理应用程序进程中主线程的执行,调度和执行活动,广播以及活动管理者请求的其他操作。当我打开App时,首先调用的是这个类中的main方法,也就是说这里控制着程序的启动。ActivityThread...原创 2018-07-24 09:57:01 · 790 阅读 · 0 评论 -
Fragment启动过程,从getFragmentManager开始
概述时至今日,Fragment已经成为Android开发中应用最广泛的方案了,几乎每一个APP都离不开它的影子。为了更深入的理解其中原理,我们从Fragment中源码开始分析。这里我们选择V4包中的Fragment来进行分析。原创 2017-12-27 17:38:21 · 1937 阅读 · 0 评论 -
AsyncTask源码解析
概述我们知道在Android应用开始程序运行时,系统会为应用启动一个单独的进程。默认情况下,该应用中的所有组件都会运行在相同的进程和主线程中。一个Android程序默认只有一个进程,但是你可以在清单文件中通过android:process 属性设置多进程。在同一个进程中,可以拥有多个线程。在这些线程中,可以分为两种:主线程(Main Thread/UI Thread)和工作线程(Worker Thr原创 2017-08-14 11:02:44 · 227 阅读 · 0 评论 -
深入理解 Android 之 View 的绘制流程(五)_invalidate,postInvalidate和requestLayout
上几篇文章里,我们分别介绍了View的三大工作流Measure,layout,draw。在分析源码的过程中我们会发现View的绘制流程还会受到其他方法的影响。比如:requestLayout,invalidate,postInvalidate。下面我们来分别解析下这三个方法的不同调用。原创 2017-07-26 08:54:16 · 941 阅读 · 0 评论 -
深入理解 Android 之 View 的绘制流程(四)_Draw
前面我们介绍了Measure和layout,下面我们就开始分析Draw。先从ViewRootImpl中开始。原创 2017-07-25 08:45:20 · 648 阅读 · 0 评论 -
深入理解 Android 之 View 的绘制流程(二)_Measure
上一篇中介绍了将xml布局文件加载到Activity中之后,对View进行开始绘制之前的一些操作进行了说明。知道了View的绘制主要是由ViewRoot负责执行,并且对执行的核心方法进行了图示说明,如下:原创 2017-07-20 09:32:15 · 639 阅读 · 0 评论 -
深入理解 Android 之 View 的绘制流程(三)_Layout
上篇介绍了ViewRootImpl调用View的测量操作,下面就开始介绍ViewRootImpl中的布局操作了。原创 2017-07-20 16:01:07 · 310 阅读 · 0 评论 -
深入理解 Android 之 View 的绘制流程(一)
上一篇中我们介绍了通过setContentView方法将xml布局文件加载到Activity中,知道了在PhoneWindow中的setContentView方法里,有分别调用了installDecor方法,mLayoutInflater.inflate(layoutResID, mContentParent),才使得布局能够显示出来,那么现在我们就要介绍xml的布局中的view是如何被绘制出来的。原创 2017-07-14 18:42:15 · 527 阅读 · 0 评论 -
再一次撸Handler、Looper、Message源码
从事Android开发的人,一定对Handler非常熟悉。Handler是一套消息处理机制,允许你发送,处理消息来实现线程间的通讯。每个Handler实例与一个线程和该线程的消息队列关联。当你创建一个Handler时,它会绑定到创建它的线程的消息队列上。将传递的消息加入到这个消息队列中,通过轮询取出消息,然后Handler可以接收并处理出队的消息。Handler发送消息通过 post、postAtT原创 2017-07-05 09:45:01 · 1733 阅读 · 0 评论 -
源码分析setContentView加载布局文件的过程
我们都知道通过setContentView方法将xml布局文件加载到Activity中,然后屏幕才能显示出xml中定义的view。在整个过程中,无须做太多的操作,屏幕就能显示出正常的内容。现在我们从源码的角度来看看系统到底帮我们处理了哪些操作。原创 2017-07-12 09:13:50 · 562 阅读 · 0 评论 -
当FragmentTransaction在add和replace时,它们之间的区别
前言我们在使用FragmentTransaction的时候,经常会遇到add,replace这两个方法。原创 2017-02-26 16:11:27 · 9791 阅读 · 3 评论 -
Android 中onSaveInstanceState()解析
前言在上一篇文章中,我们分析了Fragment中出现Can not perform this action after onSaveInstanceState的异常。里面提到了不能在onSaveInstanceState之后,进行commit的操作。下面将对Activity中的onSaveInstanceState方法进行说明。原创 2016-12-08 10:00:23 · 2356 阅读 · 0 评论 -
Fragment中出现Can not perform this action after onSaveInstanceState
前言在项目开发中,将app安装在某些手机上时,有时会出现闪退的情况。通过定位抛出的异常信息如下:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState原创 2016-12-07 18:32:36 · 779 阅读 · 0 评论 -
Android 中LayoutInflater原理分析
概述在Android开发中LayoutInflater的应用非常普遍,可以将res/layout/下的xml布局文件,实例化为一个View或者ViewGroup的控件。与findViewById的作用类似,但是findViewById在xml布局文件中查找具体的控件,两者并不完全相同。原创 2016-07-20 18:07:23 · 2503 阅读 · 1 评论 -
Android源码解析ViewGroup的touch事件分发机制
本篇是继上一篇Android 源码解析View的touch事件分发机制之后的,关于ViewGroup事件分发机制的学习。同样的,将采用案例结合源码的方式来进行分析。前言在分析ViewGroup事件分发机制之前,我们也需要学习一下基本的知识点,以便后面的理解。原创 2016-06-24 16:30:33 · 3270 阅读 · 0 评论 -
Android 源码解析View的touch事件分发机制
本篇主要分析的是touch事件的分发机制,网上关于这个知识点的分析文章非常多。但是还是想通过结合自身的总结,来加深自己的理解。对于事件分发机制,我将使用两篇文章对其进行分析,一篇是针对View的事件分发机制解析,一篇是针对ViewGroup的事件分发机制解析。本片是对View的事件分发机制进行解析,主要采用案例结合源码的方式来进行分析。原创 2016-06-22 13:38:00 · 4321 阅读 · 0 评论 -
为何在onCreate中通过View.post能获取宽高
我们在获取View的宽高时,其实执行的代码是:/** * Return the width of the your view. * * @return The width of your view, in pixels. */@ViewDebug.ExportedProperty(category = "layout")public final int getWidth() {...原创 2018-08-16 17:45:53 · 494 阅读 · 0 评论