Framework概要

概述

启动时init进程加载init.rc文件,启动zegote进程,zegote就是app_process进程,app_process进程装在Android的系统Class、
装载需要的底层so库,装载相应资源;app_process启动system_server进程,
system_server进程中创建了AMS、PMS、WMS。app_process与system_server进程通过socket通讯。

启动一个App时,执行ActivityThread的main方法,初始化Context、Resource、AssetManager等基础设施。运行主线程Looper。

在system_server中会启动以下服务

SystemServiceManager

PowerManagerService

WebViewUpdateService

DisplayManagerService

ActivityManagerService

管理Activity,在App进程启动时,通过Binder,在ActivityThread中进行Activity的管理。

Read More

Android中的ClassLoader

概述

  • BootClassLoader:主要用于加载系统的类,包括 java 和 android 系统的 类库,和 JVM 中不同,BootClassLoader 是 ClassLoader 内部类,
    是由 Java 实现的,它也是所有系统 ClassLoader 的父 ClassLoader
  • PathClassLoader:用于加载 Android 系统类和开发编写应用的类,只能加载已经安装应用的 dex 或 apk 文件,也是 getSystemClassLoader 的返回对象
  • DexClassLoader:可以用于加载任意路径的 zip,jar 或者 apk 文件,也是进行安卓动态加载的基础

Read More

Android测试实践

为什么要做测试?

很多公司为了节省成本,基本上是不会要求开发写单元测试的。自己做完的功能,动手点点看看基本流程是否通畅就丢给测试了。
项目小的时候这样也不会有啥问题。随着项目的复杂度越来越高,人员越来越多,不同的人员改动到同一块代码,但彼此对原来的逻辑不是很清楚(因为代码量实在太多,想要一个人弄清楚所有细节已经不太可能)。
这也是为什么大家宁肯写新的代码也不愿意改旧的代码的原因。而如果每个功能在开发的同时配置了单元测试,那么理论上新的功能 开发完之后,所有的单元测试应该都是可以跑通的。这样就能自动帮我们检查出来一些难以发现的bug。

Android如何进行单元测试

  • androidTest目录:应包含在实际或虚拟设备上运行的测试。此类测试包括集成测试,端到端测试以及仅JVM无法验证应用程序功能的其他测试。
  • test目录:应包含在本地计算机上运行的测试,例如单元测试

Read More