Android
文章平均质量分 75
时光如刀
春去冬来,潮起潮落,人生几何;
夏落秋起,风去风来,岁月无痕
展开
-
Android ANR 分析与优化
1.概览 ANR 全称 Applicatipon No Response;Android 设计 ANR 的用意,是系统通过与之交互的组件(Activity,Service,Receiver,Provider)以及用户交互(InputEvent)进行超时监控,以判断应用进程(主线程)是否存在卡死或响应过慢的问题,通俗来说就是很多系统中看门狗(watchdog)的设计思想。2.分析常规的分析思路:BackTrace 日志AnrInfoKernel 日志Logcat 日志Meminfo 日原创 2021-04-20 10:54:56 · 239 阅读 · 0 评论 -
Android app进程fork启动过程
1.AMS.startProcessLocked//frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags,原创 2020-09-23 20:38:14 · 1566 阅读 · 1 评论 -
AndroidO audio系统之AudioPolicyService分析(三)
1.AudioPolicyService基础AudioPolicy在Android系统中主要负责Audio”策略”相关的问题。它和AudioFlinger一起组成了Android Audio系统的两个服务。一个负责管理audio的“路由”,一个负责管理audio“设备”。在Android O 版本的系统中,这两个服务都是在系统启动的过程中,通过main_audioserver.cpp来加载的。...原创 2018-07-27 22:01:36 · 6673 阅读 · 5 评论 -
AndroidO audio系统之audioflinger启动分析(二)
1. audioflinger创建过程在Android8.0的音频系统中,AudioFlinger是一个C++的Binder服务,运行在HAL进程中,它是在audioserver.c//frameworks/av/media/audioserver/audioserver.rcservice audioserver /system/bin/audioserver class ma...原创 2018-07-20 11:50:45 · 4985 阅读 · 0 评论 -
AndroidO audio系统之框架简介(一)
1、概述 Audio系统在Android中负责音频方面的数据流传输和控制功能,也负责音频设备的管理,它是Android中最复杂的子系统之一。本文将粗略分析一下audio的整体框架及播放、录制流程。不足之处,敬请指正,谢谢!2、音频框架图 2.1 Application层 音频相关的应用软件有: 音乐播放器,电话,声音设置,视频播放器等等。...原创 2018-07-13 18:01:13 · 13521 阅读 · 4 评论 -
Android 8.0 系统启动流程之init.rc语法规则(六)
1、概述 init经过前两个阶段后,已经建立了属性系统和SELinux系统,但是init进程还需要执行很多其他的操作,还要启动许多关键的系统服务,但是如果都是像属性系统和SELinux系统那样一行行代码去做,显得有点杂乱繁琐,而且不容易扩展,所以Android系统引入了init.rc。 init.rc是init进程启动的配置脚本,这个脚本是用一种叫Android Init La...原创 2018-06-17 12:48:49 · 12087 阅读 · 2 评论 -
Android 8.0 系统启动流程之zygote进程(八)
前言在上一篇中我们讲到,init进程会解析.rc文件,并介绍了.rc文件中的语法规则。其中不乏有许多service启动,这些service通常不是普通的服务,文档里面的称呼是daemon(守护进程). 所谓守护进程就是这些服务进程会在系统初始化时启动,并一直运行于后台,直到系统关闭时终止. 我们本篇讲的zygote进程就是其中之一,zygote进程主要负责 创建Java虚拟机,加载系统资源...原创 2018-06-30 22:00:26 · 1906 阅读 · 2 评论 -
Android 8.0 系统启动流程之init进程--第一阶段(四)
1、概述 上一篇中讲到,Linux系统执行完初始化操作最后会执行根目录下的init文件,init是一个可执行程序,它的源码在platform/system/core/init/init.cpp。init进程是用户空间的第一个进程,我们熟悉的app应用程序都是以它为父进程的,init进程入口函数是main函数,这个函数做的事情还是比较多的,主要分为三个部分init进程第一阶段ini...原创 2018-06-02 11:52:38 · 4122 阅读 · 4 评论 -
Android 8.0 系统启动流程之init.rc解析与service流程(七)
1、概述 上一篇文章中我们介绍了一下init.rc文件中的语法规则,而本文将分析如何解析rc文件,并对rc文件中的某一service启动过程进行分析。2、解析.rc文件之前我们在文档中看到.rc文件主要有根目录下的 /init.rc ,以及{system,vendor,odm}/etc/init/这三个目录下的 *.rc , 然后就是如果有一个特殊目录被设置的话,就替代这些目录...原创 2018-06-23 20:48:58 · 4515 阅读 · 0 评论 -
Android 8.0 系统启动流程之init进程--第二阶段(五)
1、概述 上一篇中讲了init进程的第一阶段,我们接着讲第二阶段,主要有以下内容创建进程会话密钥并初始化属性系统进行SELinux第二阶段并恢复一些文件安全上下文新建epoll并初始化子进程终止信号处理函数设置其他系统属性并开启系统属性服务2、创建进程会话密钥并初始化属性系统由于之前第一阶段最后有设置INIT_SECOND_STAGE,所以在第二阶段is_fir...原创 2018-06-09 00:09:45 · 2851 阅读 · 0 评论 -
Android 8.0 系统启动流程之Linux内核启动--kernel_init进程(三)
在上一篇文章中详细的分析了kthreadd进程的启动,init进程也是有idle进程去触发启动的,init进程分为前后两部分,前一部分是在内核启动的,主要是完成创建和内核初始化工作,内容都是跟Linux内核相关的;后一部分是在用户空间启动的,主要完成Android系统的初始化工作。 本文着重分析init进程的前一部分,init进程的后一部分将在下一篇文章中讲述。1、init进...原创 2018-05-27 13:45:03 · 4491 阅读 · 1 评论 -
surfaceflinger之buffer生产过程
上一篇分析了surfaceflinger的生产-消费者模型,本文着重阐述生产者对buffer生产过程。这个过程需要弄清一下几个问题: 1、生产者是谁? 2、生产者如何从BufferQueue获取空闲buffer? 3、绘制完成后的buffer如何压入BufferQueue中,以便消费者获取?1、生产者应用获取画布surface流程已经详细地分析了APP如何通过re...原创 2018-04-28 15:37:08 · 1132 阅读 · 0 评论 -
Android性能剖析工具——simpleperf
谈到Android上的性能剖析,很多人会想到TraceView,SysTrace。TraceView擅长Method Tracing,与IDE集成,使用方便,不过有时候它的误差让人无法忍受;SysTrace的牛逼之处在于它可以给出整个系统的一些关键模块的性能信息,因此用途广泛。事实上,在AOSP中有另外一个性能剖析工具不为人知,这个安静的小可爱就是今天要介绍的主角—— simpleperf。我们...原创 2018-12-03 20:51:45 · 1884 阅读 · 0 评论 -
android IPC通信中的UID和PID识别
https://blog.csdn.net/windskier/article/details/6921672IPCThreadState对象维护了2个变量 pid_t mCallingPid; uid_t mCallingUid;从变量名称来看,这2个变量保存了进程的PID和UID,并且由于这两个变量...原创 2019-01-07 20:56:08 · 527 阅读 · 0 评论 -
Input子系统框架之InputReader
1、概述根据Input子系统框架之深入理解EventHub分析。输入设备扫描完成,并加入epoll中,监听事件。从前面的getEvents函数分析得知,当按键事件发生后,getEvents函数返回。 这里再贴一下Input 处理时间流程图,然后按步骤详细分析。上面的type是linux的输入系统里的事件,具体的值可以查看 查看input.h/* WARNING: DO NOT EDIT, A...原创 2019-08-10 19:26:36 · 661 阅读 · 0 评论 -
Input子系统框架之IMS的创建与启动
一、概述IMS分为Java层与Native层两个部分,其启动过程是从Java部分的初始化开始,进而完成Native部分的初始化。 IMS在SystemServer.startOtherServices()方法中启动的。IMS的诞生分为两个阶段:· 创建新的IMS对象。调用IMS对象的start()函数完成启动。我们先看下整个启动过程的序列图,然后根据序列图来一步步分析。二、系统启动...原创 2019-07-27 20:10:13 · 621 阅读 · 0 评论 -
Input子系统框架之深入理解EventHub
1、概述InputReaderThread继承自C++的Thread类,Thread类封装了pthread线程工具,提供了与Java层Thread类相似的API。C++的Thread类提供了一个名为threadLoop()的纯虚函数,当线程开始运行后,将会在内建的线程循环中不断地调用threadLoop(),直到此函数返回false,则退出线程循环,从而结束线程。 InputReaderThre...原创 2019-08-03 14:12:42 · 1213 阅读 · 0 评论 -
Input子系统框架之system层的知识储备
1、必备的Linux知识 inotify和epoll1.1、INotify介绍与使用INotify是一个Linux内核所提供的一种文件系统变化通知机制。它可以为应用程序监控文件系统的变化,如文件的新建、删除、读写等。INotify机制有两个基本对象,分别为inotify对象与watch对象,都使用文件描述符表示。 inotify对象对应了一个队列,应用程序可以向inotify对象添加多个监听。...原创 2019-07-21 13:15:14 · 527 阅读 · 0 评论 -
Android P中Activity的管理机制
1、Activity概述基于Android 9.0的源码剖析, 分析Android Activity启动流程;Android的管理主要是通过Activity栈来进行的。当一个Activity启动时,系统根据其配置或调用的方式,将Activity压入一个特定的栈中,系统处 于运行(Running or Resumed)状态。当按Back键或触发finish()方法时,Activity会从栈中被压出...原创 2019-07-10 20:20:50 · 1077 阅读 · 0 评论 -
Android P PowerManagerService分析(一)
1、概述 PowerManagerService是负责管理、协调设备电源管理的系统服务之一,设备常见功能如亮灭屏、亮度调节、低电量模式、保持CPU唤醒等,都会通过PMS的协调和处理。其继承自SystemService,因此具有SystemService子类的共性:具有生命周期方法,由SystemServer启动、注册到系统服务中,通过Binder和其他组件进行交互等。其生命周期方法如下...原创 2019-05-20 22:52:01 · 5958 阅读 · 1 评论 -
Android P包管理机制之PackageManager简介
1.PackageManager简介与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能。PackageManager是一个抽象类,它的具体实现类为ApplicationPackageManager,ApplicationPackageManager中的方法会通过IPackageManager与AMS进行进程间...原创 2019-05-04 16:56:26 · 1700 阅读 · 1 评论 -
Android P输入法框架系统--输入法显示
1、程序焦点获取事件导致输入法显示 从上面可以知道程序获得焦点时,程序端会先间接的调用IMMS的startInput将焦点View绑定到输入法,然后会调用IMMS的windowGainFocus函数,这个函数就可能显示输入法, 是否显示输入法由焦点view的属性决定。过程流程图如下:代码处理逻辑如下://ViewRootImpl.javacase MSG_WINDOW_FOCUS_...原创 2019-04-07 17:54:27 · 1663 阅读 · 0 评论 -
Android P输入法框架系统--view绑定输入法过程
1、概述 IMMS如何处理view绑定输入法事件呢?为了讲解整个绑定过程,我们假设此时输入法service还没启动,这个情况下的输入法绑定是最长的,整个过程经历过如下过程:启动输入法service绑定输入法window的token请求输入法为焦点程序创建一个连接会话将输入法的接口传递回程序client端绑定输入法和焦点view 1-4是和程序相关的,而5是和vie...原创 2019-03-31 16:48:46 · 977 阅读 · 0 评论 -
Android P输入法框架系统--view如何触发绑定
在PC时代,输入法的原始输入来自实体键盘,鼠标,然后输入法将这些事件对应的ASCII码转换为俄文,中文,当然如果是英文是不需要转换,直接发送即可。而在Android系统里,由于输入法dialog永远没法成为焦点window,所以输入法永远没法获取到按键事件,也就是说输入法的输入数据只能来自触摸事件,输入法显示出键盘(大家称之为软键盘),用户点击键盘UI, 然后输入法将触摸事件所在位置的字符...原创 2019-03-24 17:37:04 · 1135 阅读 · 1 评论 -
AndroidO Treble架构下HIDL服务Java框架实现
前面介绍了HIDL服务在native层的实现过程,包括HIDL服务加载创建、服务注册、服务查询过程等,那么Java层是否也实现了相关的服务框架呢? 通常情况下,所有的Hal都实现在native层面,每个hal进程都是一个native进程,由init进程启动,在hal进程启动时会完成HIDL服务注册...转载 2018-05-12 17:21:37 · 2430 阅读 · 2 评论 -
AndroidO Treble架构下HIDL服务查询过程
通过前面的分析我们知道,Hal进程启动时,会向hwservicemanager进程注册hidl服务,那么当Framework Server需要通过hal访问硬件设备时,首先需要查询对应的hidl服务,那么Client进程是如何查询hidl服务的呢?这篇文章将展开分析,这里再次以IComposer为...转载 2018-05-12 17:20:00 · 1148 阅读 · 0 评论 -
Activity创建到与SurfaceComposerClient建立通信流程
1. 概述 应用程序是通过activity来展现,那么activity是如何完成绘制并显示呢?其实应用程序的显示是和surface有关,那么activity与surface有是什么关系呢?接下来几篇文章将以这个为出发点分析,应用程序是如何一步步通过activity、surface呈现出用户界面的。2. activity的创建 应用启动时zygote会fork一个子进程作为APP...原创 2018-01-04 11:51:01 · 858 阅读 · 0 评论 -
Android surfaceflinger (4) -Vsync产生上报流程
1、垂直同步信号VSync(即V-Sync垂直同步)的具体含义和用途文章不细说,看下图的VSync的位置大致也就知道它的用途(简单理解成是硬件定时中断貌似也可以,周期性的硬件中断,频率为60Hz,周期为0.0167s,也就是16ms)。 本文主要关注以下几个问题: \ (1)VSync是如何产生的? \ (2)VSync是如何分发到应用进程的? 2、流程框图3、VSync产生VSync事件原创 2017-10-25 21:12:16 · 2092 阅读 · 0 评论 -
Android surfaceflinger(3)-DisplayDevice封装
上一篇文章介绍了HWComposer的创建及初始化,本文将根据上述创建的HWComposer封装出DisplayDevice对象进行分析。1、引言 在此之前已经分析了HWComposer,接下来继续分析SurfaceFlinger::init的后续操作void SurfaceFlinger::init() { //详见http://blog.csdn.net/marshal_zsx/art原创 2017-10-11 20:19:17 · 3821 阅读 · 1 评论 -
android surfaceflinger(2)-HWComposer初始化
上一篇文章介绍了init进程去启动surfaceflinger的过程;本文将继承上篇文章继续往下分析,上文分析到SurfaceFlinger::init();本文将主要分析init()里面的HWComposer初始化。 时序图如下: 1、HWComposer创建void SurfaceFlinger::init() { // Initialize the H/W composer ob原创 2017-09-21 17:03:28 · 3238 阅读 · 1 评论 -
android surfaceflinger(1)-启动初始化1
从本篇文章起,将对Android display系统框架进行分析,分析Android display必然涉及到surfaceflinger,故先分析一下,surfaceflinger的启动初始化流程。若文中有什么分析不对的,希望大家多多指出分享。谢谢!1、surfaceflinger启动触发 surfaceflinger是Android系统的一个重要后台本地服务,它是有init进程去启动的。1.1原创 2017-09-12 23:27:26 · 2427 阅读 · 0 评论 -
开机动画制作修改
1、概述Android的开机启动流程大致可以分为三个阶段,第一阶段为kernel logo图片显示(本文不做分析);第二阶段为Android logo图片显示,第三阶段为Android开机动画。2、修改启动log2.1 init.cppint main(int argc, char** argv) {......queue_builtin_action(console_init_action,原创 2017-09-04 23:41:35 · 690 阅读 · 2 评论 -
指纹识别分析之enroll流程
1、调用时序图2、app层2.1 FingerprintEnrollEnrolling.java文件路径: /packages/apps/Settings/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java protected void onStart() { super.onStart(原创 2017-07-22 23:39:50 · 4680 阅读 · 2 评论 -
指纹识别分析之framework初始化流程
1、概述 在系统开机的时候,会创建systemserver进程,该进程会启动framework层的各种后台服务,其中包括FingerprintService、fingerprintd等服务。初始化流程时序如下: 2、SystemServer.java文件路径:/frameworks/base/services/java/com/android/server/SystemServer.java2.原创 2017-07-21 21:11:20 · 1792 阅读 · 0 评论 -
camera的startpreview流程
一、概述 本文从framework中的camera native接口开始分析preview流程,文中的…..表示部分代码省略。二、camera CS简易框图三、preview调用过程2.1 camera.javapublic native final void startPreview();camera进行预览时,APP最终调用的是startPreview,而startPreview是Java本地原创 2017-06-25 21:23:50 · 7669 阅读 · 2 评论 -
指纹框架--指纹选项加载(一)
一、概述 近几年手指指纹识别快速发展,基本所有的手机都配套指纹识别器;Android6.0开始Google提供标准的上层指纹框架。下面先分析一下;系统中的设置是如何判断要不要加载指纹选项?二、指纹框架示意图三、指纹选项加载过程1、–>SecuritySettings.java 入口1.1 onResume() public void onResume() { super.原创 2017-05-20 17:08:20 · 962 阅读 · 0 评论 -
应用获取画布surface流程
前面我们已经分析了activity通过SurfaceComposerClient在surfaceflinger服务中创建了一个Client。在本文中,我们将详细分析应用获取画布Surface流程。在分析Surface创建流程时,会涉及显示缓冲区队列相关知识,本文只是简单一笔带过,将在后面做具体分析。1、申请创建Surface1.1 viewrootImpl.java在应用启动时...原创 2018-04-07 22:38:24 · 1968 阅读 · 1 评论 -
SurfaceComposerClient与SurfaceFlinger建立通信流程
前面我们已经分析了activity从创建到调用本地方法去创建SurfaceComposerClient的过程。在本文中,我们将详细分析SurfaceComposerClient创建时是如何绑定SurfaceFlinger。1、申请SurfaceComposerClient入口[-> android_view_SurfaceSession.cpp]static jlong na...原创 2018-04-02 19:53:49 · 3835 阅读 · 0 评论 -
activity令牌token
1、概述 activity的启动过程中涉及到Android framework中的很多个层次,如活动管理者、窗口管理者、客户端应用APP。它们之间是如何实现一一对应的? 2、Token创建: activity启动过程会去创建ActivityRecord对象记录该活动的信息,在执行构造函数就会去创建令牌Token –>ActivityRecord.javaAct...原创 2018-04-16 21:44:10 · 1446 阅读 · 0 评论 -
AndroidO Treble架构下Tranport类型查询过程
通过前面文章的分析,我们知道,Client进程在查询hidl服务接口对象时,会根据该hidl服务的Tranport类型选择加载方式,如果是HWBINDER,那么就从hwservicemanager中查询,如果是PASSTHROUGH,那么就通过PassthroughServiceManager将h...转载 2018-05-12 17:19:10 · 2589 阅读 · 0 评论