Android 内存管理

这篇文章主要是解释 Android 是如何管理 app 进程和内存,低内存配置,和一些debug 手段, 本文的 android 版本是 4.4.   Table of Contents 堆与栈 Java 虚拟机(JVM) 堆的增长 Android 如何管理内存 共享内存和私有内存 APP 内存限制及配置 Low Ram Configuration 启动 Low Ram Device 标志 停用 JIT 内核配置     微调内核 ActivityManager 以减少直接回收     微调 LowMem
632 次浏览
发表于 2018-04-24 17:38:31

Android Low Memory Killer 机制

LowMemoryKiller是Android 系统在Linux kernel的OOMKiller基础上打的一个补丁。OOMKiller在kernel 没法再分配内存的时候,寻找一个得分最高的进程来杀掉。LowMemoryKiller则提前一步,通过把剩余内存划分成不同的级别,内存在消耗的过程中,触发不同的级别,杀死相应的app进程。在触发OOMKiller前,大量缓存的app进程已经被杀死掉了。 先简单说一下OOMKiller。 我们查看任一进程的proc信息(如:/proc/1), 都会看到以下三个参
213 次浏览
发表于 2018-05-28 16:53:22

Android 输入设备子系统架构

 Android TV开发过程中,主要的输入设备是摇控器(IR),键盘(keypad),以及一些USB的HID输入设备,本文主要讲讲这块的工作流程,使用的是AN5版本。   流程 首先,Linux kernel 驱动层得到硬件设备按键的原始扫描码,触摸,移动等各种事件信息,按键码会被转化为Linux 标准的KEY (uapi/linux/input.h)。最终,kernel会把设备的事件转换成一个标准的Linux Input Event (linux/input.h) ,抛给上面的系统。   接下来, A
232 次浏览
发表于 2018-04-19 19:08:34

调试Android TV方案开机启动慢

客户使用的是Android作为TV系统,加载客户的系统后,发现开机启动要近80s,而Android公版软件只需要40s左右,当时进行了如下调试: 1: 开机后使用 logcat -v time 来抓取日志,查看是否有某些进程卡顿。 分析日志,发现时间都比较连贯,没有明显的阻塞,或者耗时长的操作,特别查看了surfaceflinger 进程,它的时间顺序也没有问题。   2:  开机过程中使用 查看 CPU和内存的消耗。 内存消耗合理,且日志里面,也没有出现过多的虚拟机释放内存的信息。 cpu消耗较公版略高
496 次浏览
发表于 2018-05-09 17:31:14

Android TV 方案开关机测试中,出现黑屏

现象就是,客户在开关机测试过程中,有一定的概率出现黑屏, 大约1分钟左右,黑屏后,系统能恢复,自动再进入Launcher,工作正常。   反复查看日志后,发现了一条线索。 **** 正常 01-01 08:00:04.979 D/SurfaceFlinger( 1092): captureScreen: supportWidth = 3840, supportHeight = 2160, maxLayerZ = -1 01-01 08:00:05.489 D/SurfaceFlin
295 次浏览
发表于 2018-05-09 17:37:26

如何创建一个Android编译工程

创建编译工程,这个说法可能不太准确,简单地说就是如何在device下面添加一个新的产品。 添加一个新产品 Android 采用的是 brand/device/product 这样一个三级的层次结构,编译系统根据相应的规则来搜索,加载编译项目。所以,建立新的工程,最重要的就是先定义好 'brand', 'device' 和'product'。 下面让我们来为华为的meta7_32G来创建一个产品配置吧: brand = 'huawei' device = 'meta7' product = "met
235 次浏览
发表于 2018-06-06 10:42:31

Android Vold 架构简析

 这篇文章中主要是分析一下,android 系统里面的 Vold—— Vold 是andorid 系统的设备管理器,扮演着linux里面的udev的角色。 它通过监听uevent的端口,取得uevent事件,dispatch 到 相应的 Listener,执行相应的动作。     UEvent 在linux平台上,uevent 给系统软件提供设备事件,设备节点的权限管理等等,它由kernel发出。通过socket与 udev 守护进程通讯 (systemd-udevd.service), 在 sysfs
526 次浏览
发表于 2018-04-26 14:37:28

Android 属性

属性是Android系统的一大特色,它用来进行系统配置,模块,组件间的通讯。这篇文章主要是聊一下Android property的应用和工作原理以及一些常用的系统属性。 属性配置文件 在主板系统上,属性文件分别是: /default.prop -- 对应编译系统 out 目录下的 .../root/default.prop /system/build.prop -- 对应编译系统 out 目录下.../system/build.prop /data/property -- 这个目录下,是persist开头
572 次浏览
发表于 2018-05-04 16:26:14

Android 系统工具

本文主要讲解一些常用的Android系统工具,它们可以查看系统的运行状态, debug系统。本文所使用的版本是 AN6。   查看源码版本 cat build/core/version_defaults.mk PLATFORM_VERSION := 6.0 PLATFORM_SDK_VERSION := 23   列出所有包名 pm list packages       Input Event getevent 查看系统input的event 事件,详见文章 "Android输入设备子系统"   ser
404 次浏览
发表于 2018-05-22 10:06:18

Android native platform 调试

tombstone 对native crash的调试,第一步是要拿到tombstone文件。位置在/data/tombstones/, 如果,文件系统没有该目录,需要手动先创建该目录,不然,不会生成tombstone文件。当crash发生的时候,debuggerd service会把进程的现场信息,写入tombstone文件。debuggerd的源文件是"system/core/debuggerd/tomstone.cpp",默认最多生成10个tomstone文件,dump 进程的 memory map。
575 次浏览
发表于 2018-06-06 15:15:28

Android apk文件结构及其安装,校验流程

apk文件 apk实际上就是一个zip文件,可以直接使用zip解压,它包含 classes.dex, 资源文件,证书,动态链接库等。 classes.dex: 代码文件,包含可以被Dalvik解释执行的字节码。build ROM的时候,还可以使用dex2oat把.dex部分代码预编译成 .odex文件,用来提高app运行的速度,因为,odex实质上是一个ELF格式的可执行文件,它里面是机器码,可以直接在虚拟机运行。 当存在 .odex文件的时候,虚拟机不需要使用JIT来运行.dex文件。 动态链接库: n
287 次浏览
发表于 2018-07-26 16:15:18

注册 忘记密码 登录
上传