Android 分区

2020-01-16
阅读 16 分钟
15.8k
下面列出标准Android系统中存在的分区,供应商可能对分区进行增减和更改。需要注意的是,Android 9开始对分区结构增加新的技术(A/B 设备、system-as-root等),它们对分区作用有很大影响。

Android 启动原因

2020-01-14
阅读 3 分钟
12k
ro.boot.bootreason:系统启动过程中,Init进程会将内核启动命令行中的androidboot.bootreason=<reason> 转化为ro.boot.bootreason。启动命令行中的bootreason由一般芯片供应商提供,内核在断电前会将启动原因写入专用的硬件资源或约定的内存地址。下次启动时,Bootloader就可以读取相应的资源来确定启动原因,然...

Android Treble 简介

2020-01-10
阅读 2 分钟
7k
Android 8.0 重新设计了 Android 操作系统框架(名为“Treble”的项目),以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。

Android VNDK简介

2020-01-10
阅读 11 分钟
23.6k
VNDK的全称是Vendor Native Development Kit,是Android 8.0引入的一种新技术。它表现一系列库的合集,用于让供应商开发自己的HALs。VNDK 包含在 system.img 中,并在运行时与供应商代码动态关联。

Linux性能分析工具Perf简介

2020-01-02
阅读 28 分钟
35.3k
Perf是一个基于Linux 2.6 +系统的分析工具,它抽象了在Linux中性能度量中CPU的硬件差异 ,提供一个简单的命令行界面。 Perf基于最新版本Linux内核 的perf_events 接口。 这篇文章通过示例展示了 Perf工具的使用。 输出结果在Ubuntu 11.04(内核版本2.6.38-8-generic)上获得,硬件是在使用双核英特尔Core2 T7100 CPU的惠...

Android 动态链接库隔离

2020-01-02
阅读 5 分钟
11.5k
Treble 架构将 Android 系统分为 Framework 和 Vendor 两部分,在本地库上也分为两套:Framework 和 Vendor。使用本地库时,动态链接器会在运行时从存储器中找到库,将它们加载到内存中并链接它们的符号。动态链接器使用库搜索路径(Library Search Path,Linux上由 LD_LIBRARY_PATH 来配置)来查找库,当接收到库加载请...

使用Android Energy Profiler

2019-12-26
阅读 2 分钟
3.4k
Energy Profiler可帮助您找到应用程序在哪些地方使用超过所需要的电量。Energy Profiler监视CPU、射频和GPS传感器的使用,并用可视化效果显示每个组件使用的电量。Energy Profiler还会显示可能影响能耗的系统事件(唤醒锁、警报、作业和位置请求)的出现情况。Energy Profiler不是直接测量能耗,而是使用一个模型来估计...

使用Android Network Profiler

2019-12-26
阅读 2 分钟
3k
Network Profiler在时间轴上显示实时网络活动,显示发送和接收的数据以及当前连接数。这使您可以检查应用程序传输数据的方式和时间,并适当地优化底层代码。要打开Network Profiler,请执行以下步骤:

使用Android Memory Profiler

2019-12-26
阅读 8 分钟
5.1k
Memory Profiler是Android Profiler中的一个组件,它可以帮助您识别内存泄漏和可能导致卡顿、冻结甚至应用程序崩溃的内存抖动。它显示一个应用程序内存使用的实时图表,并允许你抓取堆栈信息、强行垃圾收集和跟踪内存分配。

使用Android CPU Profiler

2019-12-24
阅读 10 分钟
5.9k
优化应用程序的CPU使用率对系统有很大帮助,例如提供更流畅的用户体验以及节省设备电池寿命。在与应用程序交互时,可以使用CPU Profiler实时检查应用程序的CPU使用率和线程活动,也可以检查方法跟踪、功能跟踪和系统跟踪中的详细信息。CPU Profiler记录和显示的信息类型取决于您的配置:

使用Android Profiler评估应用性能

2019-12-24
阅读 2 分钟
3.8k
对于Android Profiler我也是在学习中,所以这次打算全程翻译Android Developers上的文章。一方面Developers上文档写的很详细,自己也写不出别的花样;另一方面当做学习笔记,便于以后查阅。建议英文好的同学还是直接看原文,翻译的文章难免加入个人理解,也就可能会导致误解。不习惯使用Profiler的同学还是可以通过”Sdk/...

Android卡顿优化梳理

2019-12-23
阅读 1 分钟
1.8k
在Stan_Z的博客里看到这个,不得不转。总结的太好了,也是我一直想做的。这张图给系统分析提供了方向,遇到问题时常看看。我一直认为,能把图画明白说明白的人就真的懂了。

Android StrictMode使用

2019-12-20
阅读 4 分钟
6.9k
StrictMode是Android提供的一个开发工具,用于检测一些异常的操作,以便开发者进行修复。StrictMode可以监控以下问题, 不应该在应用主线程中完成的工作,包括磁盘读写、网络访问等。 内存泄露,包括Activity泄露、SQLite泄露、未正确释放的对象等。 使能StrictMode 通常在Application和Activity的开始处(如onCreate)...

Android检查GPU呈现速度和过度绘制

2019-12-20
阅读 3 分钟
7.3k
GPU呈现模式工具以滚动直方图的形式展现,显示渲染UI窗口每帧所花费的时间,系统的基准时间是于每帧16ms。这个分析工具可以帮助确定GPU在图形绘制过程中各阶段的状态,或过度绘制引起渲染性能降低的情况。

Android性能分析工具Systrace

2019-12-18
阅读 17 分钟
14.1k
Systrace是Android系统中性能分析的主要工具。它记录一段时间内的设备活动,并产生一个HTML格式的Systrace报告。它收集了CPU调度、磁盘操作、应用线程等信息,可以帮助开发者分析系统瓶颈,改进性能。Systrace实际上是一些工具的集合,在设备端使用Atrace来控制用户空间的tracing和设置ftrace,kernel中使用tracing机制...

Android系统稳定性分析流程

2019-12-10
阅读 4 分钟
4.8k
这篇做为稳定性分析的开篇,但我不知道下篇什么时候写。因为前几天突然想到这些就记录下来。我觉得这里记录的会比具体的分析方法更有用,分析方法总能在网上找到的。

Android OOM Adjustments

2019-12-09
阅读 18 分钟
5.4k
之前有写过文章分析LMK,那篇主要是分析LMK实现原理,并没有仔细分析AMS中OOM Adj的调整。这次参考Android 9.0的代码来分析一下,主要是分析代码实现。首先看一下OOM Adj的定义都有哪些。

Android进程调度

2019-12-04
阅读 12 分钟
8.5k
Linux系统将进程分为实时进程和普通进程,实时进程的优先级范围为0~99,普通进程为100~139,并且二者的调度策略也是不通的。Android系统是基于Linux系统之上开发的,其充分利用了Linux系统的一些特性,有些甚至可以做为开发范本。这篇文章分析一下Android系统是如何利用Linux进程调度策略来管理进程优先级的,源码参考An...

Cgroup 用法

2019-12-04
阅读 15 分钟
6.1k
实在懒得写了,cgroup转一篇,Cgroup 用法,写得很详细。对cgroup子系统的分析可参考下面两篇。 cgroup 分析之CPU和内存部分 cgroup 子系统之 net_cls 和 net_prio 介绍docker的的过程中,提到lxc利用cgroup来提供资源的限额和控制,本文主要介绍cgroup的用法和操作命令,主要内容来自 [1][链接] [2][链接] cgroup cgrou...

Linux进程调度

2019-11-28
阅读 4 分钟
4.3k
上图中需要补充说明的是,进程正在”占有CPU执行“时应该处于TASK_RUNNING状态。EXIT_ZOMBIE状态应该是很短暂的,父进程需要使用wait类系统调用回收子进程,回收后进程状态就转变为EXIT_DEAD,如果父进程一直不回收,子进程就变为僵尸进程。__TASK_TRACED状态只有在使用debugger是才会出现,例如使用gdb设置断点,进程在断...

Android 共享内存

2019-11-27
阅读 3 分钟
9.6k
最近就是遇到什么问题就整理一下文档,系统的写一个课题需要的时间较多,目前还是抽不出时间来。这个题目的起因就是有人问共享内存的问题,说道Binder就是基于共享内存实现的,之前在网上也有看到过。不知道这种说法的起因是什么,但这完全不对啊。好多人都这样说,我也有点迷糊,还是看看Ashmem的实现好。

Android中外接键盘的检测

2019-11-21
阅读 6 分钟
6.1k
今天来了一个问题:软键盘无法弹出。分析后是因为系统判断当前有外接硬键盘,就会隐藏软键盘。但实际情况并不是这么简单,该问题只有在特定条件下偶现,具体分析过程就不说了,就是软硬键盘支持上的逻辑问题。借着这个机会整理一下键盘检测的过程。

Android Low Memory Killer

2019-11-18
阅读 11 分钟
5.9k
Linux的内存的使用原则就是不要浪费内存,所以在程序退出时在一段时间内还停留在内存中,这也是我们下一次打开程序时发现快一些的原因。但是这样带来的坏处就是如果驻留在内存中的程序多了,容易导致OOM(out of memory)的可能。Linux中使用内存监控机制来避免OOM发生。

Linux Storage Stack Diagram

2019-11-13
阅读 5 分钟
8.7k
工作学习中,没有比图表更好的东西了(虽然很多人在嘲笑PPT),尤其是描述精准的图表。当你想画图说明一个结构或一个流程时,必须对其已经充分理解。而在讲解一张图时,也必须对其有基本的理解。这真的不简单,反正对我来说是这样。关于Linux Storage架构,就有一张描述很精准的图,“Linux Storage Stack Diagram”。这张...

Linux内核内存管理

2019-11-07
阅读 9 分钟
9.4k
Linux使用虚拟内存技术,所以在应用层所能看到的、访问的都是虚拟地址。对于32位系统来说(本文涉及的都是32位系统),每一个进程可以寻址的地址空间都是4G,无论物理内存有多大。应用开发者其实是可以不用关心内存空间的划分,仅仅使用封装后的接口就可以完成开发。但在工作中,如果对地址空间没有基本的了解,在程序设...

Linux内存管理

2019-10-30
阅读 13 分钟
2.1k
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾...

Binder驱动之内存管理

2019-10-29
阅读 11 分钟
3.8k
用户空间在使用Binder进行IPC前,需要对Binder驱动进行初始化,这个过程主要执行了Binder驱动的open和mmap操作。mmap映射Binder传输使用的内存空间,大小为(1M - 8K),但仅仅是进行虚拟地址空间映射,实际的物理内存分配会在数据传输时进行。mmap的源码如下,

Binder驱动之传输事件

2019-10-25
阅读 9 分钟
3.1k
Binder传输时通过Binder线程为主体进行交互的,所以Binder线程中会保存Binder传输事件,在binder_thread中使用transaction_stack做为一种栈的形式来记录所有的传输事件。transaction_stack保存着当前正在进行的传输事件,采取压栈的方式保存,所以栈顶为最新的传输,栈底为最早的传输。这种方式也表现了线程中传输事件的...

Binder驱动之debug信息与数据结构

2019-10-22
阅读 11 分钟
5.6k
在进行Binder debug或分析问题时,通常需要看一下当前的Binder状态信息。Kernel通过SYS系统提供了一些文件节点供我们读取,它们位于/sys/kernel/debug/binder/,分别为:

Binder之AIDL

2019-10-18
阅读 3 分钟
3.6k
网上讲解Aidl的文章很多,都比较详细,这里就不再重复了。本人更偏重与Framework和Native,对APP没有发言权,文章中可能出现错误,请理解。这篇侧重于一下表面看不到的实现,碎片化的做些分析。