lwenkun

吾生也有涯

操作系统原理总结

Operating System conclusion

操作系统原理总结 对课本知识的概括和总结,来自《操作系统原理》第四版 —— 庞丽萍著 用户环境 操作系统的生成: 系统生成 根据计算机的硬件配置选择相应的功能模块来组装成一个可利用的操作系统 硬件配置信息可通过从文件读取或者系统程序员 系统初启 引导程序 => 系统核心 => 核心初始化 核心初始化:先建立 0# 进程(永远处于核心态,换页)...

Java 8 方法引用

Method References

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

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

动态加载&热更新

动态加载应用之简单热更新 在之前的一片文章中,我和大家分享了安卓动态加载的原理,这篇文章就和大家分享一下动态加载在热更新方面的应用,我会通过一个假想的案例来演示如何在项目利用动态加载实现热更新。 案例 某项目需要对某些数据集进行排序,但由于时间原因,开发团队使用了一个比较基础的算法实现该排序功能。上线之后才发现该排序算法的性能太差,影响了用户体验,因此开发团队不得不对该算法进行优化。优化...

探究 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 = ...

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

Process of starting a Service in android

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

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

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...