JasonWang's Blog

JasonWang's Blog

《Effective Java》摘记

第一遍看完感觉没有学到什么,又看了一遍,然后自己找了些实例对比着理解了书上的要点,算是对Java编程有了更多的认识。以下是 《Effective Java 2nd edition》的摘记。

Consider static factory methods instead of constructors

相比构造函数,静态工厂方法有哪些优点了?首先,静态工厂方法有自己的名字,这可以增强程序的可读性;其次,静态工厂方法每次调用时,不用创建新的对象实例;第三,静态工厂方法可以返回其返回类型的任何子类型对象。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
{

public static final Boolean TRUE = new Boolean(true);

public static final Boolean FALSE = new Boolean(false);

....
//根据boolean值返回相应的Boolean对象
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}

}

Android Phone进程启动过程分析

之前解决一个开机搜网慢的问题时,发现由于Phone进程起来以后才会主动连接RILD,因而在一定程度上Phone进程启动的时间会影响网络状态注册的快慢。适当的将Phone进程提前,可以将网络注册时间提前一点,让状态栏中信号显示的时间提前。那么,Android中作为系统的核心进程之一,Phone进程是如何启动的了?

本文参考代码为Android NN7.0, RIL运行机制请参考: Android RIL概述

Android Launcher工作原理

Android系统启动完成后,第一个启动的Activity就是主界面应用程序Launcher,相当于电脑的桌面。Launcher界面可以看到系统中安装的所有APP,点击APP即可启动该APP应用了。那么,Launcher到底是如何启动的以及如何自定义自己的Launcher了?这篇文章我们就来讲讲这两个问题。

如何在Java中调用C_C++方法

有时,需要在Java中直接调用本地(native)方法,把一些耗时的操作使用效率更高C/C++实现。在Java中调用本地方法通常被称为Java Native Interface(JNI)。那么,什么时候需要用到JNI了?

  • 需要在底层实现耗时更小、更快的程序
  • 在Java中需要调用本地代码库
  • 需要使用平台相关但Java标准库文件不支持的特性

接下来,我们就来看一看,如何在Java中通过JNI来调用本地方法?

罗素《权威与个人》

coorperation

《权威与个人》是罗素在1948年里斯讲座所做的几次演讲的文章合集,里边谈到了个人自由与国家权威之间的关系,以及如何平衡这两者以促进人类的进步,确保个人生活的活力。对于缺乏自由与民主熏陶,在集体主义与强权政府成长起来的我而言,这种书无疑是一种解毒剂,让我意识到自由于个人、组织以及社会的重要意义。

Android RILD详解

前言

在上一篇文章里(http://sniffer.site/2016/11/29/Android-RILD%E8%AF%A6%E8%A7%A3/),简要介绍了Android RIL的架构。这一篇文章,就来看一看RILD(RIL Daemon)相关的内容。Android RIL在HAL(Hardware Abstract Layer)层(C++层)由三个部分组成:

  • RILD是系统的守护进程,主要用于初始化LIBRIL以及启动厂商自定义的Vendor RIL;
  • LIBRIL库被RILD初始化完成后,用于与Vendor RIL之间进行交互,负责接收、发送指令;
  • Vendor RIL库是第三方厂商自定义的一个库,用于向Modem发送指令或者接收来自LIBRIL或者Modem的指令, Android有一个基于AT指令的默认参考实现(reference-ril)
Android RIL概述

前言

Android作为一个通用的移动平台,其首要的功能就是通话、短信以及上网等通信功能。那么,从系统的角度来看,Android究竟是怎么实现与网络的交互的了? 这篇文章里,就来看一看Android中负责通信功能的Telephony中间层,通常也被称之为RIL(Radio Interface Layer)的具体实现原理与架构。

Android手机要实现与网络端的通信,需要跨越两个层:

  • RIL Java(RILJ):负责将上层APP的通信请求发送给HAL层;
  • RIL C++(RILD): 系统守护进程,负责将RILJ的请求命令发送给CP(Communication Processor)
Android系统时间自动更新机制

Android系统是如何更新时间的了?Android提供了两种时间更新方式,NITZ和NTP,其中NITZ是基于移动基站通信更新的,与语音通话时相同的一个通道,而NTP则是通过数据通道(此时手机必须能上网)来更新的。这里,就来了解下这两种时间更新方式具体是如何工作的吧?

Java程序编译过程

Java编译过程

一般,C/C++程序的编译过程可以分为5个步骤(见下图):Preprocessing(预处理),Parsing(解析), Translation(翻译),Assembling(汇编),Linking(链接)。

Java程序具有平台无关性,其在Java Virtual Machine(JVM)上执行,因此编译过程与C/C++大不相同:Java程序首先由编译器翻译成包含了Bytecode(字节码)的.class文件,程序执行时,由类加载器(class loader)将该类的字节码加载到JVM中,JVM会解释执行相应的Bytecode。

avatar
JasonWang
生命短暂,莫空手而归