安卓动态加载入门

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

阅读全文 »

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

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

阅读全文 »

安卓进程通信机制之 AIDL

什么是 AIDL

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

AIDL 的语法就是 java 的语法,就是导包上有点细微差别。java 中如果两个类在相同的包中,是不需要进行导包操作的,但是在 AIDL 中,则必须进行导包声明。

阅读全文 »

RxJava 原理探究

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

阅读全文 »

浅析 hashcode() 和 equals()

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

阅读全文 »

安卓事件传递机制的理解

事件产生的源头以及预处理

当我们的手指点击(滑动)屏幕时,我们的手指就可能触发了一系列的事件,这些事件队列的排列顺序可以这样表示:{ ACTION_DOWN, ACTION_MOVE, ACTION_MOVE, ACTION_MOVE, … , ACTION_UP },这样表示最开始我们触发的事件是ACTION_DOWN,然后是一至多个ACTION_MOVE事件(其实点击时也会触发ACTION_MOVE事件,因为屏幕很灵敏),当手指离开屏幕的瞬间,触发了一个 ACTION_UP 事件。

事件既然产生了,那怎么传递呢?

阅读全文 »

ViewPager

什么是 ViewPager?图告诉你一切:

ViewPager Screenshot_2016-04-04-17-00-18 Screenshot_2016-04-04-17-00-28 Screenshot_2016-04-04-16-59-21

如图,白色矩形区域就是我们的 ViewPager,正如我们所熟悉的,ViewPager 通常会配合 tab 使用,什么是 tab?就是“网易新闻,网易体育,网易财经,网易女人”(page title) 这四个标题所在的那个区域,每个 page title 代表着一个 tab 。这个区域再上面一点就是 ToolBar 了。 tab 的实现方法有很多种,但现在最受欢迎并且最美观的就是谷歌MD提供的 TabLayout 了。现在我们主要讲下 TabLayout + ViewPager 的实现和使用吧。

阅读全文 »