XBlog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

深入理解Android的Handler机制

发表于 2017-08-06 | 分类于 Android | 阅读次数

Android的消息机制概述

  • Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。
  • MessageQueue是消息队列,内部存储了一组消息,以队列的形式对外提供插入和删除的工作。虽然叫消息队列,但它的内部并不是真正地队列,而是采用单链表的数据结构来存储消息列表。
  • Looper是消息循环,MessageQueue只是一个消息的存储单元,而Looper会以无线循环的形式去处理消息。
  • Looper还有个特殊的概念,是ThreadLocal,ThreadLocal并不是线程,它的作用是可以在每个线程中存储数据。Handler创建的时候会采用当前线程的Looper来构造消息循环系统,而ThreadLocal可以在不同的线程中互不干扰的存储并提供数据,通过ThreadLocal可以轻松获取每个线程的Looper。
  • 线程是默认没有Looper的,如果需要用到Handler就必须为线程创建Looper,而主线程ActivityThread被创建时就会初始化Looper,这也就是主线程中默认可以使用Handler的原因。
阅读全文 »

JVM之字节码执行引擎

发表于 2017-08-05 | 分类于 JVM | 阅读次数

概述

在Java中,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致:

  1. 输入:字节码文件
  2. 处理:字节码解析
  3. 输出:执行结果。

物理机的执行引擎是由硬件实现的,和物理机的执行过程不同的是虚拟机的执行引擎由于自己实现的。

阅读全文 »

JVM之类加载机制

发表于 2017-08-05 | 分类于 JVM | 阅读次数

类加载过程

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。如图所示:

阅读全文 »

JVM之类文件结构

发表于 2017-08-05 | 分类于 JVM | 阅读次数

概述

实现语言无关性的基础仍然是虚拟机和字节码存储格式。虚拟机不和包括Java在内的任何语言绑定,它与“Class”文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其它辅助信息。

Java语言中的各种变量、关键字和运算符号的语义最终都是有多条字节码指令组合而成,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。

阅读全文 »

JVM之垃圾收集器与内存分配策略

发表于 2017-08-01 | 分类于 JVM | 阅读次数

对象已死吗

在堆里面存放着java世界几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象哪些还“存活”,哪些已经“死去”

引用计数算法

给对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器就加1,;当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能再被使用的。

java虚拟机中没有选用引用计数算法是来管理内存,其中最主要的原因是它很难解决对象之间互相循环引用的问题

阅读全文 »

JVM之内存运行时区域

发表于 2017-07-31 | 分类于 JVM | 阅读次数

JVM数据区域

java虚拟机所管理的内存将会包括以下几个运行时数据区域:

阅读全文 »

源码分析Android中的线程和线程池

发表于 2017-07-25 | 分类于 Android | 阅读次数

概述

线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时的操作。在操作系统中,线程是操作系统调度的最小单元。

  • AsyncTask封装了线程池和Handler,它主要方便开发者在子线程中更新UI。
  • HandlerThread是一个具有消息循环的线程,在它的内部可以使用Handler。
  • IntentService是一个服务,系统对它进行了封装使其可以更方便地使用后台任务,IntentService内部使用了HandlerThread来执行任务,当任务执行完毕之后IntentService会自动退出。

AsyncTask的工作原理

AsyncTask是一种轻量级的异步任务类,他可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程上更新UI。从实现上来说,AsyncTask封装了Thread和Handler。但不适合特别耗时的任务,特别耗时建议用线程池。

阅读全文 »

View的工作原理

发表于 2017-07-25 | 分类于 Android | 阅读次数

初识ViewRoot和DecorView

ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView建立关联,这个过程可参看源码:

1
2
root = new ViewRootImpl(view.getContext, display);
root.setView(view, wparams, panelParentView);

View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout、draw三个过程最终才将一个View绘制出来的。其中measure用来测量View的宽和高,layout用来确定View在父容器的放置位置,而draw则负责将View绘制在屏幕上,针对perfromTraversals的大致流程,可用下列流程图来表示:

阅读全文 »

Android中的IPC方式

发表于 2017-07-25 | 分类于 Android | 阅读次数

概述

IPC方式,即Android中的跨进程通信方式,主要有讲了:Bundle、文件共享、AIDL、Messenger、ContentProvider、Socket

使用Bundle(最简单的进程间通信方式)

四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口,所以它可以方便地在不同的进程间传输。

阅读全文 »

设计模式之Builder和AlertDialog的源码分析

发表于 2017-07-25 | 分类于 设计模式 | 阅读次数

Builder

Builder模式是一步步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构造复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。

栗子

我们通过一个例子来引出Builder模式。假设有一个Person类,我们通过该Person类来构建一大批人,这个Person类里有很多 属性,最常见的比如name,age,weight,height等等

阅读全文 »
1234
XuJiaoJie

XuJiaoJie

Never stop, search for better yourself

33 日志
7 分类
7 标签
Github CSDN
© 2018 XuJiaoJie
由 Hexo 强力驱动
主题 - NexT.Pisces