Framework
fengluoye2012
理解是一个循序渐进的过程
展开
-
Zygote进程浅析
简介zygote是受精卵的意思,它是Android中的一个非常重要的守护进程服务(Daem Service),所有的其他Dalvik虚拟机进程都是通过zygote孵化(fork)出来的。Android应用程序是由Java语言编写的,运行在各自独立的Dalvik虚拟机中。如果每个应用程序在启动之时都需要单独运行和初始化一个虚拟机,会大大降低系统性能,因此Android首先创建一个zygote虚拟...原创 2018-04-20 19:35:01 · 6127 阅读 · 0 评论 -
Activity的启动模式和任务栈
简介上一篇文章详细介绍了Activity生命周期详解及注意事项。根据上一篇文章我们知道,当Activity A开启一个Activity B之后,系统会创建一个Activity B实例,推入到任务栈中,并且位于栈顶,位于Activity A的实例之上;当点击back键之后,Activity B从任务栈中被弹出即Activity B被销毁;Activity A重新可见,再次回到栈顶。任务...原创 2018-04-03 18:37:45 · 457 阅读 · 0 评论 -
Activity生命周期详解及注意事项
简介Activity是Android app的重要组成部分,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。每个Activity都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。一个应用通常由多个彼此松散联系的Activity组成。一般会指定应用中的某个Activity为“主”Activity,即首...原创 2018-03-27 18:32:21 · 552 阅读 · 0 评论 -
Service的常见用法分析
简介Service四大组件之一,主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。例如:上传图片,大量计算,保活;Service后台执行任务,但是运行在主线程中,如果需要执行耗时任务,需要开启子线程;Android的后台指:它的运行不依赖UI,即使Activity被销毁,或者程序关闭,只要进...原创 2018-01-10 17:50:43 · 875 阅读 · 0 评论 -
AsynTask的用法和内部原理详解
简介AsynTask方便在后台线程中执行操作,然后将结果发给主线程,从而在主线程更新UI,无需关心Thread和Handler;AsynTask只能执行短暂的后台任务,如果需要执行长时间耗时任务,推荐使用java.util.concurrent包中的ThreadPoolExecutor;使用AsynTask至少要重写doInBackground方法,和经常用来更新UI的onPostExecut...原创 2018-01-19 15:42:55 · 538 阅读 · 0 评论 -
IntentService和HandlerThread
简介IntentService是Service的子类,用来处理异步请求,客服端通过startService(Intentintent)发送请求,IntentService在需要的时候创建,在工作线程(HandlerThread)中处理每个请求,处理完成后IntentService自动关闭;IntentService内部有一个子线程(HandlerThread )和Handler(Serv...原创 2018-01-19 15:42:26 · 293 阅读 · 0 评论 -
线程和线程池的用法
简介线程是执行并发的单元,有自己的本地存储栈(ThreadLocal),存储参数和局部变量,所有的APP启动的时候,都至少有一个线程(主线程)在运行。系统提供了两种开启线程的方式:1)继承Thread,重写run()方法;2)在Thread的构造函数传入Runnable;然后调用start()方法开启线程。每一个线程都有一个优先级影响系统调用线程的先后顺序;可以通过setPriority(in...原创 2018-01-16 18:03:50 · 276 阅读 · 0 评论 -
Android Binder机制浅析
Binder机制听的比较多,在实际的应用中主要是AIDL跨进程通信的实现原理,但是我们平时也很少深入的了解;但是在阅读系统源码的时候尤其是四大组件的启动流程,都和Binder息息相关,APP进程通过Binder和SystemServer进程通信调用ActivityManagerService的方法,经过层层调用之后,SystemServer进程ActivityManagerService的方法又通...原创 2019-03-20 15:55:48 · 472 阅读 · 0 评论 -
Broadcast流程源码分析
Broadcast是观察者模式(发布订阅者模式)的应用,用于进程间通信或者进程内通信,如果仅是用在进程内通信则可以选择LocalBroadcastManager更加高效,安全;在阅读该文章前,最好先阅读,EventBus也是观察者模式(发布订阅者模式)的应用,用于进程间通信;四大组件的启动流程,相比来说Service的启动流程相对比较简单些,Broadcast和Activity相对比较复杂;...原创 2019-03-17 16:47:21 · 416 阅读 · 0 评论 -
APP进程和SystemServer进程通信
SystemServer进程是由Zygote进程孵化的第一个进程,大部分Android提供的服务都在该进程中,SystemServer中运行的进程公共有六十多种,主要包括:ActivityManagerService(AMS),WindowManagerService(WMS),PackagManagerService(PMS)等;这些系统服务都是以一个线程的方式存在Systemserver进程中...原创 2019-03-22 14:58:07 · 1080 阅读 · 0 评论 -
Handler消息机制
简介Handler的使用过程很简单,通过Handler可以轻松的将一个任务切换到Handler所在的线程中去执行;很多人认为Handler的作用是更新UI,这确实没错,但是更新UI只是Handler的一个特殊使用场景;如子线程做耗时任务,当耗时任务结束之后,可能需要在UI上作出改变,由于Android限制子线程不能更新UI,只能在主线程更新UI,所以通过Handler就可以将更新UI 的...原创 2018-01-16 18:06:57 · 194 阅读 · 0 评论 -
深入理解Handler消息机制
简介Handler主要用于是线程之间转换;通过其他线程发送消息,在目标线程消费消息,做到线程之间的切换;消息机制主要组成部分:Handler:发送和接受消息(Message);MessageQueue:消息队列,将Handler发送的消息存在队列中(实际是单链表);Looper:死循环,不断的从MessageQueue中取出要执行的消息,执行Handler的dispatchMessage...原创 2018-09-23 14:55:04 · 203 阅读 · 0 评论 -
SystemServer进程浅析
前言从上一篇文章Zygote进程浅析我们知道Zygote是孵化器,所有其他Dalvik虚拟机进程都是通过zygote孵化(fock)出来的;所以SystemServer进程是由Zygote进程fock(孵化)出来的,详见XXX。SystemServer进程是Android系统的核心之一,大部分Android提供的服务都在该进程中,SystemServer中运行的进程公共有六十多种,主要包括:A...原创 2018-05-02 19:09:31 · 5849 阅读 · 0 评论 -
Activity启动流程浅析(Anroid-26)
前言Activity是Android的四大组件之一,也是我们最常用的组件,我们一般通过startActivity()或者startActivityForResult()方法开启一个新的Activity,但是具体如何启动一个新的Activity,我们对此毫无概念,不知道其内在的实现原理和流程,现在我们来根据Anroid-26源码具体了解下Activity的整个启动流程。在阅读之前可先了解下:...原创 2018-05-10 15:16:36 · 288 阅读 · 0 评论 -
View的绘制过程
前言在实际的开发过程中,类似TextView的setText()之后,View就会展示我们赋值的内容,但是在类似setText()操作之后,系统做了哪些操作来实现最终的结果的呢?我们现在来看一下。1:调用requestLayout() —View类requestLayout() —ViewRootImpl类requestLayout()—scheduleTraversals()—doTrave...原创 2018-10-31 18:14:06 · 220 阅读 · 0 评论 -
View的事件传递及分发机制
前言当我们点击一个View,点击的动作是怎么传递到当前View的,系统会做哪些处理呢?我们在处理滑动冲突的时候,从哪里下手,毫无头绪;我们先来看下事件的传递及分发机制,系统是如何传递事件,分发事件的,给我们处理相关问题提供基础知识。先了解下Activity的层级结构,便于更好的理解事件的传递顺序;要点总结:触摸事件有一个down,多个move,一个up组成;事件的传递是从Act...原创 2018-11-06 10:15:49 · 6895 阅读 · 3 评论 -
ListView源码分析
简介在Android开发中,ListView是最常用的View之一,用来展示大量的数据;但是大多数情况下,只是机械式地不断重复地使用,并没有注意内部原理,不太清楚其内部的原理是多么的巧妙,Item如何不断的复用,我们在实际工作中如何参考这种方式,去设计符合我们需要的自定义View。在此我们开始学习ListView的内部设计原理。ListView的继承关系先来看下AdapterView类是抽...原创 2018-11-22 17:15:54 · 186 阅读 · 0 评论 -
CoordinatorLayout的源码分析
CoordinatorLayout的使用CoordinatorLayout:是加强版的FrameLayout;主要用在以下两个实例:1)作为根布局;2)作为多个子View特殊交互的容器;CoordinatorLayout配合AppBarLayout+可滑动View(NestedScrollView,RecyclerView)使用;AppBarLayout:是一个竖直的线性布局,实现了me...原创 2018-11-20 09:53:24 · 271 阅读 · 0 评论 -
RecyclerView源码分析
前言RecyclerView是一个Android5.0推出的比ListView更强大的列表控件;可以实现更复杂的效果,同时它的解耦性也更好,分析起来比LIstView更复杂;View的绘制过程View的事件传递及分发ListView的源码分析先来看下RecyclerView中的内部类;主要有LayoutManager、Recycler(类似ListView的RecycleBin)、Vie...原创 2018-11-30 18:44:00 · 356 阅读 · 0 评论 -
线程池工作原理
前言线程池大家都听说过或者使用过,以Android-26来分析,线程池的工作原理:线程池在创建之后,线程池内没有一个线程,在添加任务之后;只有在运行的线程数小于核心线程数时,创建核心线程,执行任务;当达到最大核心线程数,但是队列未满的情况,则往队列中添加,等待有空闲的核心线程之后,从队列中取出任务执行;当队列也满了之后,并且在运行的线程未达到最大线程数,再创建普通线程(在任务完成一段时...原创 2019-02-25 11:46:52 · 3849 阅读 · 0 评论 -
startService流程
开启Service进程的主要类android.content包的ContextWrapper类android.content包的Context类android.app包的ContextImpl类android.app包的ActivityManager类android.os包的ServiceManager类android.os包的ServiceManagerNative类android...原创 2019-03-06 15:00:05 · 447 阅读 · 0 评论 -
Resources 资源加载及引入外部资源
Resources 资源加载加载res中的资源,都是通过getResources()获取的,但是Resources是在什么时候被创建的呢,如何通过Resources获取到对应的资源的呢?XmlResourceParser layout = getResources().getLayout(R.layout.activity_change_skin);int color = getResour...原创 2019-04-07 22:13:15 · 8726 阅读 · 0 评论