Gityuan

Keep on going never give up

[置顶]Android 操作系统架构开篇

基于Android 6.0或更高版本的源码,专注于分享Android系统原理、架构分析的原创文章,这是Android系列文章的开篇。

[置顶]Flutter 跨平台演进及架构开篇

基于Flutter 1.5.4或更高版本的源码,专注于分享Flutter引擎、框架、虚拟机等架构与原理解读的原创文章。

Linux进程管理(二)--fork

基于Kernel 4.4源码 kernel/include/linux/sched.h kernel/include/linux/kthread.h kernel/arch/arm/include/asm/thread_info.h kernel/kernel/fork.c kernel/kernel/exit.c kernel/kernel/sched/core.c 一. ...

Linux进程管理(一)

一. 概述 Linux是类Unix系统,借鉴了Unix的设计并实现相关接口,但并非Unix。Linux是由Linus Torvalds于1991年创造的开源免费系统,采用GNU GPL协议保护,下面列举Linux的一些主要特点: Linux系统中万物皆为文件,这种抽象方便操作数据或设备,只需一套统一的系统接口open, read, write, close即可完成对文件的操作 ...

Android SDK与API Level对应关系

Android SDK与API Level Google发布的Android系统习惯以甜点命令,并且首字母以字母顺序表依次排序,对应表如下: 平台版本 API级别 版本代号 发布时间 Android 9.0 28 Pie(馅饼) 2018.8 ...

Android打印Trace堆栈

本文介绍一些Android常见的调试技巧 一. 获取Trace 调用栈信息(Trace)是分析异常经常使用的,这里简单划分两类情况: 当前线程Trace: 当前执行流所在线程的调用栈信息; 目标进程Trace:可获取目标进程的调用栈,用于动态调试; 1.1 当前线程Trace 1) Java层 Thread.currentThread().dumpStack(...

AMS之dumpsys篇

基于Android 7.0的源码分析 一.概述 前面介绍过AMS相关的一些数据结构,每个数据结构有大量的成员变量,为了查询当前手机运行时状态的 变化值,可以通过dumpsys activity命令来完成,该方法最终是调用AMS.dump()方法。 dumpsys命令用法简要介绍过dumpsys命令 的基本用法,以及系统服务列表信息,那么本文重点介绍AMS。 根据dumpsys ...

AMS总结(一)

从另一个维度,简要总结下四大组件的超时统计区间,以及Handler情况。 一. 组件超时统计 1.1 Service 序号 App端方法 生命周期 计时起点 计时终点 1 AT.handleCreateService onCreate...

全面剖析SharedPreferences

一. 概述 SharedPreferences(简称SP)是Android中很常用的数据存储方式,SP采用key-value(键值对)形式, 主要用于轻量级的数据存储, 尤其适合保存应用的配置参数, 但不建议使用SP 来存储大规模的数据, 可能会降低性能. SP采用xml文件格式来保存数据, 该文件所在目录位于/data/data//shared_prefs/ 1.1 使用示例 Sh...

四大组件之ActivityRecord

一. 引言 BroadcastRecord,ServiceRecord都继承于Binder对象,而ActivityRecord并没有继承于Binder。 但ActivityRecord的成员变量appToken的数据类型为Token,Token继承于IApplicationToken.Stub。 appToken:system_server进程通过调用scheduleLaunchActi...

四大组件之ContentProviderRecord

一. 引言 作为四大组件之一的ContentProvider,相比来说是设计得稍逊色,有些地方不太合理,比如provider级联被杀, 请求provider时占用system_server的binder线程来wait()等。 即便很少自定义ContentProvider,但你也可以会需要使用到ContentProvider,比如通信录,Settings等; 使用Provider往往跟数据...

四大组件之BroadcastRecord

一. 引言 广播在Android系统使用频率比较高,广播的使用场景往往是在满足某种条件下发出一个事件(broadcast), 多处(Receiver)可以监听该事件通知并做出相应的改变。比如亮/灭屏,网络状态切换等事件发送时都会发出相应的广播。 LoadedApk ReceiverDispatcher InnerReceiver extends IIntentRe...

四大组件之ServiceRecord

一. 引言 Android系统中最为重要的服务便是AMS, AMS管理着framework层面四大组件和进程. 本文从另一个维度 来说一说四大组件之一的Service. 每个app进程运行的Service, 对应于system_server进程中AMS的ServiceRecord对象. 也就是说所有app进程的Service, 都会记录在system_server进程, 好比一个大管家. ...

四大组件之综述

本文基于Android 6.0的源代码,来分析四大组件的管理者AMS frameworks/base/services/core/java/com/android/server/am/ - ActivityManagerService.java - ProcessRecord - ActivityStackSupervisor.java - ActivityStac...

Binder异常解析

一. 概述 Android有时会抛出Binder相关的异常,比如DeadObjectException,TransactionTooLargeException等。 当遇到这些异常,到底是哪个环节出问题而抛出的呢?总共有哪些类型的异常会被抛出呢? 1.1 RemoteException public class RemoteException extends AndroidExcept...

LocalBroadcastManager原理分析

一. 概述 当不需要通过send broadcasts来完成跨应用的通信,那么建议采用LocalBroadcastManager, 将会是更加地高效、安全地方式,并且对系统带来的影响也是更小。 BroadcastReceiver采用的binder方式实现跨进程间的通信; LocalBroadcastManager使用Handler通信机制。 1.1 使用实例 //1. 自...

简述Activity与Window关系

一. 概述 AMS是Android系统最为核心的服务之一,其职责包括四大核心组件与进程的管理,而四大组件中Activity最为复杂。 其复杂在于需要跟用户进行UI交互(涉及Window),WMS其主要职责便是窗口管理,还有跟App,SurfaceFlinger等 模块间相互协同工作。简而言之: App主要是具体的UI业务需求 AMS则是管理系统四大组件以及进程管理,尤其是Act...