XBlog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

android进阶之Watchdog检查系统异常机制

发表于 2018-01-18 | 分类于 android进阶 | 阅读次数

Watchdog简介

Watchdog是Android系统提供的以后总检查系统异常的机制,正如其名,“看门狗”,它看的是Android框架层的几个核心服务。Watchdog一旦发现的AMS、WMS和PMS等核心服务的主线程阻塞,就清除systemserver进程,我们知道,一单SystemServer进程停止,Zygote进程就会自杀,系统就会重启。

Watchdog继承Thread,它是一个线程类,它的监控任务运行在独立的线程中,其中有两个非常重要的ArrayList变量,分别是mMonitors和mHandlerCheckers。变量mMonitors存放的是对象Monitor的子类,如AMS、PMS等。对于这类的监控主要是判断它们是否死锁。而对于变量mHandlerCheckers是ArrayList集合,里面存放的是HandlerChecker的对象,Watchdog主要是监控它里面重要的线程的handler是否阻塞,即监控重要线程的消息队列是否阻塞。mMonitors是一个HandlerChecker类型的对象。实际上,HandlerChecker类是Watchdog的核心,它负责对各个监控对象进行监控。具体的对应关系如下图所示:

阅读全文 »

android进阶之了解Zygote进程的启动及“孵化”

发表于 2017-12-20 | 分类于 android进阶 | 阅读次数

Zygote进程基础介绍

Zygote中文翻译为“受精卵”,正如其名,它主要用于孵化子进程。在Android系统中有以下两种程序:

  1. java应用程序,主要基于ART虚拟机,所有的应用程序apk都属于这类
  2. native程序,也就是利用C或C++语言开发的程序,如bootanimation。

所有的Java应用程序进程及系统服务SystemServer进程都由Zygote进程通过Linux的fork()函数孵化出来的,这也就是为什么把它称为Zygote的原因,因为他就像一个受精卵,孵化出无数子进程,而native程序则由Init程序创建启动。Zygote进程最初的名字不是“zygote”而是“app_process”,这个名字是在Android.mk文件中定义的。

阅读全文 »

android进阶之了解Android系统与开机过程

发表于 2017-12-13 | 分类于 android进阶 | 阅读次数

Android简介

Android系统的源代码数量非常庞大,这些代码主要分成4层,从低到高为Linux内核层、系统库层、应用程序框架层和应用程序层,它们分别由驱动工程师、系统工程师、框架工程师和应用程序工程师来开发。如图所示为整个Android系统的框架图:

阅读全文 »

解析HTTPS

发表于 2017-11-28 | 分类于 计算机网络 | 阅读次数

HTTPS简介

HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。也就是说使用HTTPS协议之后在网络上传输的数据是加密的密文,即便进行拦截后没有密钥进行解密的话也就是一串乱码。端口号是443

HTTPS其实就是身披SSL协议外壳的HTTP。

阅读全文 »

拆轮子系列之GreenDao框架原理分析

发表于 2017-11-22 | 分类于 拆轮子系列 | 阅读次数

GreenDao概述

如果Android项目中要使用GreenDAO框架,需要先创建一个Java项目用于生成实体类和DAO类,然后在Android项目中使用这些类,在此过程中分别需要对Android项目添加GreenDAO的核心包依赖和对Java项目添加generator包依赖,所以解析GreenDAO的源码需要解析两部分,而这里只解析GreenDAO核心包在Android项目中的工作原理,generator包中的原理很简单,总的来说有四个作用:就是用于生成实体类、DAO类、建立多表之间的关联以及配置实体类的接口和序列化功能

在Android项目中用到的最核心的四个类就是:DaoMaster、DaoSession、实体类、实体Dao类。

阅读全文 »

拆轮子系列之ButterKnife源码分析

发表于 2017-10-14 | 分类于 拆轮子系列 | 阅读次数

概述

我们都听过或者用过butterknife,知道butterknife是一款View注入的框架。在android开发时省去我们重复的敲打findViewById等方法。ButterKnife源码的分析将会先行讲解注解,反射,注解处理器,再深入分析源码。

阅读全文 »

完全剖析Android上下文环境Context

发表于 2017-09-18 | 分类于 Android | 阅读次数

Context简介

从谷歌对Context的介绍可知:

  1. Context是一个应用程序环境信息的接口,表示上下文的意思
  2. Context是一个抽象类,Android系统提供了该抽象类的具体实现类,即ContextImpl类,这里用到了一种代理模式
  3. 通过Context类获取应用程序的资源和类,也可以进行应用程序的操作,如启动Activity、发送广播、接受Intent信息等
阅读全文 »

拆轮子系列之剖析EventBus源码

发表于 2017-09-16 | 分类于 拆轮子系列 | 阅读次数

EventBus

EventBus是我们在项目当中最常用的开源框架之一。对于EventBus的使用方法也是非常的简单。然而EventBus内部的实现原理也不是很复杂。在这里便针对EventBus3.0的源码进行一下详细的分析。对于EventBus的详细使用可以参考EventBus 3.0初探: 入门使用及其使用 完全解析这篇文章

阅读全文 »

设计模式之观察者模式及在源码中的应用

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

观察者模式

观察者模式是一种行为类模式,它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

观察者模式是一个使用率非常高的模式,它最常用在GUI系统、订阅–发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。比如安卓的开源项目EventBus、Otto、AndroidEventBus等事件总线类的和RxJava响应式编程其核心都是使用观察者模式。

阅读全文 »

深入理解LayoutInflater.inflate()

发表于 2017-09-04 | 分类于 Android | 阅读次数

LayoutInflater的使用

形如 LayoutInflater.from(context).inflate(R.layout.test,root,true) 的使用在android开发中很常见,但许多人不但不清楚LayoutInflater的inflate()方法的细节,而且甚至在误用它。

这里的困惑很大程度上是因为Google上有关attachToRoot(也就是inflate()方法第三个参数)的文档太模糊。其实第三个参数的意思是:

阅读全文 »
12…4
XuJiaoJie

XuJiaoJie

Never stop, search for better yourself

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