05 2020 档案
摘要:一、Service的启动方式 Service的启动方式主要是:startService、bindService。 binderService和startService的区别: binderService不会触发应用端的onStartCommand函数。 二、startService的流程 流程分为两
阅读全文
摘要:顾名思义,UI线程就是刷新UI所在的线程。 我们知道UI是单线程刷新的,那么UI线程是哪个线程?换一个问法:UI线程==主线程吗? 这里我们提出两个方法:Activity.runOnUiThread(Runnable)、View.post(Runnable)。 我们先看一下runOnUiThread
阅读全文
摘要:一、Activity启动步骤 Activity的启动流程为:创建Activity对象 ==> 准备好Application ==> 创建ContextImpl ==> attach应用上下文 ==> 生命周期onCreate回调。 Activity的mWinodw对象就是在attach方法执行的时候
阅读全文
摘要:一、Looper检测卡顿 熟悉Handler机制的话,我们会知道Looper是给线程提供处理消息能力的类,在Android Framework启动的时候,就会创建一个Main Looper即主线程对应的Looper,Looper中会维护一个MessageQueue,负责接收Handler发送过来的消
阅读全文
摘要:一、Handler机制与ThreadLocal 在Handler机制的时候,我们会接触到Looper中的一个很重要的类:ThreadLocal,ThreadLocal并不是线程,它的作用是可以在每个线程中存储数据。 Handler在创建的时候就会获取当前线程的Looper来构造消息循环系统,获取的方
阅读全文
摘要:Binder是Android的进程间通信核心,Android的各种核心服务都是通过Binder机制进行相互通信的。熟悉Binder机制话就会知道,Binder的client部分就是通过代理模式来访问Server端的。本文我们就结合代理模式来详细讲解一下Java层Binder机制。 一、代理模式介绍
阅读全文
摘要:一、跨进程通信方式 跨进程通信主要有以下几类:管道、Socket、共享内存、信号。 1. 管道 管道的特点是半双工&单向的,管道里面的数据只能往一个方向流动。一般情况下管道是在父子进程之间使用的。 2. socket socket的特点是全双工,即可读也可写。可以用在两个无亲缘关系的进程之间,但需要
阅读全文
摘要:一、Handler Message 种类 Handler的Message种类分为3种: 普通消息 屏障消息 异步消息 其中普通消息又称为同步消息,屏障消息又称为同步屏障。 我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息
阅读全文
摘要:在深入系统的学习Handler的时候,我们接触到了Looper之所以死循环不会导致CPU使用率过高,是因为使用了Linux下的pipe和epoll机制。 Android的应用层通过Message.java实现队列,利用管道和epoll机制实现线程状态的管理,配合起来实现了Android主线程的消息队
阅读全文
摘要:1. 启动方式的区别 系统服务启动:系统服务大部分跑在system server里,一般都是在system server里面启动的,在system server启动时顺便把服务都启动了如AMS,WMS,PMS都在system server里面。 private void run(){ ... sta
阅读全文
摘要:1. Zygote是什么? Zygote是Android系统中的进程,由用户空间的第一个进程Init进程启动的,是Android系统运行的第一个AndroidRuntime进程,同时也是打通Native和Java的桥梁。 2. Zygote的作用? Zygote进程的作用主要有两个: 创建Syste
阅读全文
摘要:在深入系统的学习Handler的时候,我们接触到了Looper之所以死循环不会导致CPU使用率过高,是因为使用了Linux下的epoll机制。 Android的应用层通过Message.java实现队列,利用管道和epoll机制实现线程状态的管理,配合起来实现了Android主线程的消息队列模型。
阅读全文
摘要:一、‘非UI线程更新UI’问题探究 Android开发的时候非UI线程不能更新UI,这个是大家都知道的开发常识。但是当问到为什么?可能我们就会有些含糊了。 本文我们就针对这个问题进行探讨并进行一定的思维发散,来加深我们对Android界面刷新机制的理解。 1. UI线程的工作机制 主线程的工作机制可
阅读全文
摘要:做Android开发的都应该知道Handler的运行机制,这个问题属于老生常谈了。 这里再简单赘述一下: Handler 负责发送消息; Looper 负责接收 Handler 发送的消息,并在合适的时间将消息回传给Handler; MessageQueue是一个存储消息的队列容器。 本文我们会详细
阅读全文