lwenkun

吾生也有涯

探究 Java 虚拟机栈

Explore JVM Stack

探究 Java 虚拟机栈 前言 Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。今天我就 Java 虚拟机栈做一些比较浅的探究。 熟悉 Java 的同学应该都知道了,JVM 是基于栈的。但是这个“栈” 具体指的是什么?难道就是虚拟机栈?想要回答这个问题我们先要从虚拟机栈的结构...

Messenger 的工作原理

How does Messenger work

Messenger 的工作原理 我们知道,Handler 是安卓用来进行线程间通信的工具,但是如果涉及到进程间通信呢,可以用 Handler 吗?答案是否定的。因为 Handler 实现的线程共享是基于统一进程的线程共享同一进程空间这一事实的。而不同进程拥有不同的进程空间,所以 Hander 机制不能于进程间通信。别太沮丧,安卓为我们提供了一个 Handler 的变体让我们可以通过和 Ha...

android 记坑

android 记坑

android 记坑# 调用相机获取图片 有两种方法获取图片,分别对应不同的需求:一种是获取缩略图,适合用来做头像或者其他比较小的 icon ;另一种是获取原图,如果有保存或查看原图的需求,就应该用这种方法。 获取缩略图 Intent getThumbnail = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File file = creat...

安卓中 Service 的启动过程(上)

Process of starting a Service in android

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

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

How android apps get system services

安卓应用获取系统服务的过程 在安卓系统中存在着各种各样的系统服务, 例如 ActivityManagerService, WindowManagerService, ClipboardService 等。这些系统服务大都运行在进程 system_server 中,为每个应用提供服务。而应用程序运行于自己的默认进程当中,因此,想要获取系统服务,必定需要进行进程间的通信。而安卓中的进程间通信大...

安卓动态加载入门

安卓动态加载

安卓动态加载入门 这几周为了理解安卓动态加载技术算是花了不少时间,遇到很多坑,当然也学到了不少。一开始是学习 java 虚拟机,了解类文件格式,然后又在各种博客网站上看 dalvik 虚拟机和 dex 文件格式,了解安卓的类加载机制,到后来又去了解 art 虚拟机和 oat 文件格式。虽然有些地方没搞太清楚,学习的不够深入,但总算把动态加载的大概原理弄清了,也算是为之后更深入学习安卓动态加...

命令行编译制作一个 Java 程序

make a Java application through command line

命令行编译制作一个 Java 程序 和很多同学一样,一开始学 java 都是用 Eclipse、intellij 等 IDE 来写 java 程序的,这些 IDE 极大的简化了开发流程,很多工作都在不知不觉中帮我们做好了。出于好奇,在网上查阅各种资料后,决定自己动手用最原始的方式————命令行,编译并打包一个 hello world。 第一步:编写源代码 因为是一个 hello worl...

安卓进程通信机制之 AIDL

安卓进程通信机制之 AIDL

安卓进程通信机制之 AIDL 什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言。听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具。它的存在形式是一种 .aidl 文件,开发者需要做的就是在该文件中定义进程间通信的接口,编译的时候 IDE 就会根据我们的 .aidl 接口文件生成可供项目使用的 .ja...

RxJava 原理探究

RxJava 原理探究

RxJava 原理探究 关于 RxJava 的文章网上有很多,这里只是个人的学习总结,阅读前需要对 RxJava 有一定的了解,并不能作为学习资料,如果想要入门这里有更好的选择:给 Android 开发者的 RxJava 详解(虽然版本有点久,很多 API 都已过时,但原理差不多,不影响理解)。 如果只是想了解 API 的使用,可以看看 ReactiveX/RxJava文档中文版。 什么...

浅析 hashcode() 和 equals()

hashcode() & equals()

浅析 hashcode() 和 equals()# 在 Java 中,equals() 的默认实现的是判断两个引用变量是否指向同一内存空间,即这两个引用变量是否是对同一实例的引用。而 hashcode() 默认实现与 native 方法相关,我的猜测是和这两个引用所指对象的内存地址有关,事实上的确是这样。为什么我的猜测会是正确的呢?我们来分析原因。 Java 文档对子类重写这两个方法的要...