再读斋

MICHAEL


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索
close
再读斋

Android启动流程④Launcher启动过程

发表于 2017-09-01 21:01:06 | 分类于 Android , Framework |
Android系统的Home应用程序Launcher是由ActivityManagerService启动的,而ActivityManagerService和PackageManagerService一样,都是在开机时由SystemServer组件启动的,SystemServer组件首先是启动Pack ...
阅读全文 »
再读斋

Android启动流程③SystemServer启动过程

发表于 2017-08-25 21:01:06 | 分类于 Android , Framework |

上一篇分析了Zygote进程启动过程,了解到Zygote进程启动了 SyetemServer 进程,接下来开始学习SyetemServer进程的启动过程。

Zygote 启动 SystemServer

ZygoteInit 在 main 函数中通过调用 startSystemServer 函数启动 SystemServer进程。

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static boolean startSystemServer(String abiList, String socketName)
throws MethodAndArgsCaller, RuntimeException {
···
/* For child process */
if (pid == 0) {
if (hasSecondZygote(abiList)) {
waitForSecondaryZygote(socketName);
}
handleSystemServerProcess(parsedArgs);
}
return true;
}

代码可知实际上是调用了 handleSystemServerProcess 来启动 SystemServer进程。

阅读全文 »
再读斋

Android启动流程②Zygote进程启动过程

发表于 2017-08-21 21:01:06 | 分类于 Android , Framework |

上一篇分析了init进程的启动过程,最后就是创建Zygote进程,这篇我们将了解Zygote进程是什么,它由什么功能。

在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程fork出来的,Zygote进程在启动时会创建DVM,因此通过Zygote进程创建的应用程序和SystemServer都可以在内部获得一个DVM的实例。

下面开始分析Android 7.0 中Zygote的启动过程:

app_main.cpp

init进程启动Zygote是通过调用app_main.cpp中的mian函数中的AppRuntime的start函数实现的,我们从app_main.cpp中的mian函数开始分析:

目录位于frameworks/base/cmds/app_process/app_main.cpp

阅读全文 »
再读斋

Android启动流程①init进程分析

发表于 2017-08-16 21:01:06 | 分类于 Android , Framework |

简介

当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,它的生命周期贯穿整个linux 内核运行的始终, linux中所有其它的进程的共同始祖均为init进程。
Android系统是运作在linux内核上的,为了启动并运行整个android系统,google实现了android系统的init进程。

阅读全文 »
再读斋

Android系统架构与源码目录

发表于 2017-08-15 22:22:06 | 分类于 Android , Framework |

Android系统架构

Android 系统架构分为5层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux 内核层。如下图所示:

阅读全文 »
再读斋

Mac编译Android源码

发表于 2017-08-14 21:01:06 | 分类于 Android , Framework |

编译Android源码

本机的系统环境如下:

  • macOs Sierra 10.12.5
  • JDK 1.8.0_131
  • Xcode 8.3.3
  • 本地源码路径 /Volumes/android/aosp
  • 源码版本 android-7.1.2_r1**

配置系统环境

  • Mac创建大小写分区映像 120G
  • 安装JDK
  • 安装 xcode 命令行工具
  • 安装macports,并配置到系统环境 export PATH=/opt/local/bin:$PATH
  • 通过 macports 安装 make , git 以及 GPG
1
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
阅读全文 »
再读斋

Java8特性④Stream收集数据

发表于 2017-05-06 16:52:53 | 分类于 Java |
收集器可以简洁而灵活地定义collect用来生成结果集合的标准。更具体地说,对流调用 collect 方法将对流中的元素触发一个归约操作(由Collector来参数化)。一般来说,Collector 会对元素应用一个转换函数(很多时候是不体现任何效果的恒等转换, 例如 toList ),并将结果累 ...
阅读全文 »
再读斋

Java8特性③Stream的使用

发表于 2017-05-02 20:52:53 | 分类于 Java |
筛选和切片 filter 方法 distinct 方法 limit 方法 skip 方法 谓词筛选Stream 接口支持 filter 方法,该操作会接受一个谓词(一个返回 boolean的函数)作为参数,并返回一个包括所有符合谓词的元素的流。 123List<Dish> dishes ...
阅读全文 »
12…10
刘涤生

刘涤生

像外行一样思考,像专家一样实践。

77 日志
9 分类
20 标签
RSS
Github Weibo 简书 CSDN
© 2015 - 2017 刘涤生
由 Hexo 强力驱动
主题 - NexT.Mist