JAVA源码-LinkedList源码分析

本文的分析基于Java 1.8源码。

上篇分析了ArrayList的源码,点击这里:ArrayList源码解析
这篇将从构造方法、增删改查、遍历角度分析LinkedList源码。

LinkedList是基于链表实现的List。老规矩,先看看类图

LinkedList

同ArrayList,LinkedList也是继承自AbstractList类,是Collection的子类之一,同时实现了Serializable、Cloneable接口,这就意味着:它支持序列化,能被克隆。与ArrayList不同的是,它并没有实现RandomAccess接口,也就是它不能通过下标随机访问。

与ArrayList最大的区别是,LinkedList实现了Deque接口。因此LinkedList不仅有List的特性,也有Queue的特性。

阅读更多

JAVA源码-ArrayList源码分析

本文的分析基于Java 1.8源码。

ArrayList是线性表的实现之一,也是我们平常开发中用的最多的一种容器类。

今天就讲讲其源码实现。

先来看看其类图。

ArrayList类图

可以看到其继承自AbstractList类,也是Collection的子类之一,同时实现了Serializable、Cloneable、RandomAccess接口。

  1. 实现Serializable接口:支持序列化
  2. 实现Cloneable接口:能被克隆
  3. 实现RandomAccess接口:可以通过下标随机访问

阅读更多

Android系统启动分析(三)

本节是本系列文章的第三篇,将分析System_Server进程的启动过程和Launcher的启动过程。

第一篇文章:Android系统启动分析(一)


第二篇文章:Android系统启动分析(二)

本节涉及到的文件有:

文件 路径
ZygoteInit.java frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
ZygoteServer.java frameworks/base/core/java/com/android/internal/os/ZygoteServer.java
AndroidRuntime.cpp frameworks/base/core/jni/AndroidRuntime.cpp
app_main.cpp frameworks/base/cmds/app_process/app_main.cpp
RuntimeInit.cpp frameworks/base/core/java/com/android/internal/os/RuntimeInit.java
SystemServer.java frameworks/base/core/java/com/android/server/SystemServer.java
SystemServiceManager.java frameworks/base/services/core/java/com/android/server/SystemServiceManager.java

阅读更多

Android系统启动分析(二)

本节是本系列文章的第二篇,将分析Zygote进程的启动过程。

第一篇文章:Android系统启动分析(一)


第三篇文章:Android系统启动分析(三)

二、Zygote进程启动

上节分析了Init进程的启动流程。本节将进入到framework层,分析Zygote进程的启动流程。

本节涉及到的文件有:

文件 路径
app_main.cpp framework/cmds/app_process/app_main.cpp
AndroidRuntime.cpp frameworks/base/core/jni/AndroidRuntime.cpp
ZygoteInit.java frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
ZygoteServer.java frameworks/base/core/java/com/android/internal/os/ZygoteServer.java

2.1 app_main.main()

大家都知道Zygote进程相当于是Android的根进程,后面所有进程都是该进程fork出来的,而Zygote进程则是由Init进程fork而来。先看看Zygote进程是如何启动的。
进入到app_main的main()函数

阅读更多

Android系统启动分析(一)

本文的分析基于Android 8.1源码。

Android系统启动与应用程序的启动流程、四大组件原理、AMS、ClassLoader等息息相关,因此了解Android系统启动流程对深入理解Android有很大的帮助。

本文将分为以下几个小节讲述Android系统的系统流程,分别是:init进程启动、Zygote进程启动、SystemServer进程启动以及Launcher进程启动。

一、init进程启动

  都知道当手机关机时不会启动任何一个进程,所以在init进程启动前,Android就为进程的启动做了很多铺垫。具体为:按下电源键加载BootLoader、拉起系统OS、启动Linux内核…但由于本人暂未学到Linux内核,因此前面的暂不做分析(当我没说emmm…)

本节涉及到的文件有:

文件 路径
init.cpp system/core/init/init.cpp
init.rc system/core/rootdir/init.rc
init.zygote64_32.rc system/core/rootdir/init.zygote64_32.rc
service.cpp system/core/init/service.cpp
builtins.cpp system/core/init/builtins.cpp

阅读更多

Linux与Windows共享文件之Samba部署

一、起因

最近公司和展讯有个合作项目,因此他们那边派人过来驻场开发。这是一个好的机会去了解更多的开发方式,原先 xshell+vim的方式实在效率太低,调试也不方便,被我百般吐槽。终于在和他们的沟通中了解到一个工具:samba。它可以实现Linux系统和Windows之间的资源共享。有了samba,从此在Windows上也可以通过Android Studio、Source Insight等IDE编辑调试Android源码了。
废话不多说,直接上教程。

二、安装

1
2
sudo apt-get install samba (服务端)
sudo apt-get install smbclient (客户端,提供测试和Linux连接)

阅读更多

JAVA-理解多态


前言

  面向对象有三大特征:封装、继承、多态。
封装隐藏了类的内部实现机制,可以在不影响使用者的前提下改变类的内部结构,继承是为了重用父类代码,而多态呢?今天我就谈谈自己对多态的理解。

多态

  多态是指同一消息可以根据发送对象的不同而采用多种不同的行为方
式。多态具有以下几个优点:

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性

多态存在的三个必要条件:继承、重写、父类引用指向子类对象

阅读更多

Android Framework之Activity启动流程(三)

各位看官好,本文是Android Framework之Activity启动流程的第三篇,本篇将分析Activity生命周期的回调,新世界的大门就在眼前,走起。

第一篇:Android Framework之Activity启动流程(一)
第二篇:Android Framework之Activity启动流程(二)

执行完 ApplicationThread# handleBindApplication () 之后,这时候新进程已经启动。
回到AMS# attachApplicationLocked(),代码逻辑来到了上篇文章的注释5处,调用了ActivityStackSupervisor# attachApplicationLocked,在里面又执行了realStartActivityLocked(),这样就回到了第一篇末尾所说到的第二种情况,接下来分析第二种情况。

阅读更多