Android 进程启动原理

前言

Android 中的应用是支持多进程的,我们只要在 AndroidManifest 中给四大组件指定 android:process 属性即可让其运行在独立的进程当中。那么应用的主进程又是如何被创建的呢?一般来说,当我们的应用没有任何组件处于运行状态,此时其他应用启动我们应用的组件时,应用的主进程就会被创建,进程相当于是提供了组件运行的空间。最常见的触发应用主进程被创建的方式是应用 A 通过 startActivity 或者 startActivityForResult 启动应用 B,并且应用 B 此时没有任何组件处于运行状态,那么系统先会通过 AMS 为 B 创建一个进程,等进程创建好了再通知应用 B 创建并运行该 Activity。AMS 是运行在 system_server 进程当中的,这个进程并不会 fork 出应用进程,那么应用进程到底是哪个进程创建的呢?这就得从 Zygote 进程说起。

阅读全文 »

Java 注解学习

前言

注解是在 JDk 5 时引入的,注解可以提供一些元数据,它们能为所注解的代码提供一些不属于程序本身的数据,从而可以对程序提供一些辅助功能。这些辅助功能包括编译时检查(错误和警告)、编译时和部署时的代码加工,以及运行时的代码处理。这三种注解分别被称为源码级别的注解(这些注解主要是在编辑代码时为程序员提供错误信息);编译时注解:这种类型的注解一般需要配合注解处理器框架使用,可以在编译器编译项目时生成一些文件,包括 .java 源文件和 .xml 配置文件等;运行时注解:在程序运行的时候为程序提供一些功能,一般配合反射框架使用。

阅读全文 »

Glide 源码探究

前言

Glide 是安卓平台上媒体管理和图片加载框架,它内部封装了媒体解码工具、内存和磁盘缓存以及资源池等,并向用户暴露简单易用的接口。我们可以用它来获取、解码、并展示视频、图片和 GIF 动画。如果大家有用过 Picasso 应该知道,Glide 的使用方式和 Picasso 非常相似,甚至很多 API 的名称都一样。但是相比 Picasso,Glide 的功能更加强大,内部实现也更加复杂。接下来我们就从源码的角度来探究一下 Glide 的内部原理。

阅读全文 »

操作系统原理总结

对课本知识的概括和总结,来自《操作系统原理》第四版 —— 庞丽萍著

阅读全文 »

Java 8 方法引用

形如 ClassName::methodName 或者 objectName::methodName 的表达式,我们把它叫做方法引用(Method Reference)。可能你现在还理解不了,但是编译器足够聪明,或许你可以看看编译器是如何根据 “晦涩难懂” 的 Method Reference 来推断你的意图的。

阅读全文 »

动态加载应用之简单热更新

在之前的一片文章中,我和大家分享了安卓动态加载的原理,这篇文章就和大家分享一下动态加载在热更新方面的应用,我会通过一个假想的案例来演示如何在项目利用动态加载实现热更新。

阅读全文 »

探究 Java 虚拟机栈

前言

Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。今天我就 Java 虚拟机栈做一些比较浅的探究。

熟悉 Java 的同学应该都知道了,JVM 是基于栈的。但是这个“栈” 具体指的是什么?难道就是虚拟机栈?想要回答这个问题我们先要从虚拟机栈的结构谈起。

阅读全文 »

android 记坑

调用相机获取图片

有两种方法获取图片,分别对应不同的需求:一种是获取缩略图,适合用来做头像或者其他比较小的 icon ;另一种是获取原图,如果有保存或查看原图的需求,就应该用这种方法。

阅读全文 »

Service 的启动过程(上)

作为四大组件的 Service,由于没有 UI 界面,只能默默无闻地在后台工作。虽然我们说他是后台工作的,但是他还是默认进程的主线程中运行的,除非我们给它指定了单独的进程。Service 的启动过程有两种,一种是 startService(),另一种是 bindService()。我会在接下来的两篇文章中分别来介绍着两种启动方式,首先我们来探究 startService() 启动服务的过程。

阅读全文 »

安卓应用获取系统服务的过程

在安卓系统中存在着各种各样的系统服务, 例如 ActivityManagerService, WindowManagerService, ClipboardService 等。这些系统服务大都运行在进程 system_server 中,为每个应用提供服务。而应用程序运行于自己的默认进程当中,因此,想要获取系统服务,必定需要进行进程间的通信。而安卓中的进程间通信大多通过 Binder 机制进行,因此,要想深入理解应用是如何获取的系统服务的,必须先要了解安卓的 Binder 机制。如果对 Binder 机制不太了解的同学可以参考我的这篇博客

阅读全文 »