自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

marshal_zsx的博客

路漫漫其修远兮,吾将上下而求索

  • 博客(73)
  • 收藏
  • 关注

原创 Android资源管理中的SharedLibrary和Dynamic Reference-------之Framework的处理(三)

前面我们已经编译好了资源共享库lib-out.apk(包名:com.google.android.test.shared_library),已经引用这个共享库的应用app-out.apk(包名:com.google.android.test.lib_client),剩下的就是安装、运行起来了。这个自然不必说,但是运行的时候我们的这个App使如何加载我们的资源共享库的呢?还记不记得我们在上期的两个疑问,还有一个期待中的车祸现场?简要说一下应用的启动过程我们知道,当init进程起来后,它会解析init.**

2021-10-22 08:00:00 1716 1

原创 Android资源管理中的SharedLibrary和Dynamic Reference-------之aapt的处理(二)

    前面我们讲过了资源共享库的概念和应用,现在我们来看看它是怎么实现的吧,顺便也能了解一下Android的资源管理中的一些机制。     这里面包括了两部分:资源共享库的编译和使用这个库的App的编译。我们仍旧以上一篇文章中framework里的那个项目为例来分别讨论。那个资源共享库的包名为:com.google.android.test.shared_library,项目路径为frameworks/base/tests/SharedLibrary/lib;引用这个资源共享库的App包名为:com.g

2021-10-21 08:00:00 1912

原创 Android资源管理中的SharedLibrary和Dynamic Reference-------之资源共享库(一)

一.引言    共享库的概念,相信大家都有所了解,它有有许多优点。可以设想,在一个系统上要跑100个应用,并且它们都使用到了同一个库。如果这个库做成静态库,那么每个应用中都要打包一次这个库,100个应用就是100次,这无疑是重复的。我们可不可以在系统里只集成一次这个库呢,每个应用用到的时候再动态加载与链接,动态库的概念就这么产生了。现在,PC上Linux、Windows、Mac中动态库的应用已经非常广泛了。当然,Android中的动态库的应用也非常多,写JNI的同学都非常熟悉了。    不过,我们今天讨

2021-10-20 09:19:56 3149

原创 Android资源管理概述

转载至https://blog.csdn.net/dayong198866/article/details/94552826?spm=1001.2014.3001.5502    我们知道Android系统跑在各种各样的设备上,它的运行环境极为复杂,比如不同的语言、不同的屏幕密度、大小和方向等等。为了保证良好的显示效果,在不同的环境下,我们应该提供不同的资源。但是这些资源该如何打包、组织、加载、管理呢。显然,把这么繁重的工作交给各个应用去做很不合适,那将会使得每个Android应用中都充斥着大量的资源适配

2021-10-18 08:49:00 250

原创 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 228

原创 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 1398 1

原创 Android的触控重采样算法

1.概述    Android的触控重采样算法非常出色。Android使用触摸外推和触摸内插的组合。触摸插值意味着我们接受两个触摸事件,并在两个触摸事件中间的某个位置创建一个触摸事件。触摸外推意味着我们进行两次触摸事件,并在上一次触摸事件之前的某个位置创建一个触摸事件,或者预测触摸事件的位置。让我们从60hz的LCD刷新显示速率和100hz的触摸屏刷新扫描速率来看一下我们的标准输入。    ...

2020-05-03 13:13:46 2817 2

原创 按home键后stopAppSwitches延时5S

1、简介本文是在APP界面点击Home键后,马上在后台启动Activity会延时5秒而引起的源码分析文章。2、现象描述在APP界面,点击Home键后会打开一个悬浮窗,以表示APP在后台运行。点击悬浮窗上的按键会返回APP。就是这么一个简单的过程,却无意中发现了这个BUG。当我点击Home键后,回到主桌面,然后点击悬浮窗上的按钮返回APP,而APP不会马上返回,需要延时一段时间才会启动,开始我...

2020-03-30 15:16:40 1064 1

原创 Input子系统框架之InputDispatcher

原始链接:http://gityuan.com/2016/12/17/input-dispatcher/一. InputDispatcher起点上篇文章输入系统之InputReader线程,介绍InputReader利用EventHub获取数据后生成EventEntry事件,加入到InputDispatcher的mInboundQueue队列,再唤醒InputDispatcher线程。本文将介...

2020-03-01 22:37:46 1213

原创 Systrace 基础知识 - 锁竞争解读

参考连接:https://www.androidperformance.com/2019/12/06/Android-Systrace-Binder/1.Systrace 显示的锁的信息monitor contention with owner Binder:1605_B (4667) at voidcom.android.server.wm.ActivityTaskManagerServ...

2019-12-15 19:54:40 2673

原创 Systrace 基础知识 - Input 解读

参考连接:https://www.androidperformance.com/2019/11/04/Android-Systrace-Input/1.概述Android 中 Input 的大概处理流程:触摸屏每隔几毫秒扫描一次,如果有触摸事件,那么把事件上报到对应的驱动InputReader 读取触摸事件交给InputDispatcher 进行事件派发 InputDispatcher...

2019-12-05 20:52:44 2178

原创 Input子系统框架之InputReader

1、概述根据Input子系统框架之深入理解EventHub分析。输入设备扫描完成,并加入epoll中,监听事件。从前面的getEvents函数分析得知,当按键事件发生后,getEvents函数返回。 这里再贴一下Input 处理时间流程图,然后按步骤详细分析。上面的type是linux的输入系统里的事件,具体的值可以查看 查看input.h/* WARNING: DO NOT EDIT, A...

2019-08-10 19:26:36 623

原创 Input子系统框架之深入理解EventHub

1、概述InputReaderThread继承自C++的Thread类,Thread类封装了pthread线程工具,提供了与Java层Thread类相似的API。C++的Thread类提供了一个名为threadLoop()的纯虚函数,当线程开始运行后,将会在内建的线程循环中不断地调用threadLoop(),直到此函数返回false,则退出线程循环,从而结束线程。 InputReaderThre...

2019-08-03 14:12:42 1181

原创 Input子系统框架之IMS的创建与启动

一、概述IMS分为Java层与Native层两个部分,其启动过程是从Java部分的初始化开始,进而完成Native部分的初始化。 IMS在SystemServer.startOtherServices()方法中启动的。IMS的诞生分为两个阶段:· 创建新的IMS对象。调用IMS对象的start()函数完成启动。我们先看下整个启动过程的序列图,然后根据序列图来一步步分析。二、系统启动...

2019-07-27 20:10:13 578

原创 Input子系统框架之system层的知识储备

1、必备的Linux知识 inotify和epoll1.1、INotify介绍与使用INotify是一个Linux内核所提供的一种文件系统变化通知机制。它可以为应用程序监控文件系统的变化,如文件的新建、删除、读写等。INotify机制有两个基本对象,分别为inotify对象与watch对象,都使用文件描述符表示。 inotify对象对应了一个队列,应用程序可以向inotify对象添加多个监听。...

2019-07-21 13:15:14 493

原创 Input子系统框架之kernel层(Kernel-3.18)

一、Linux Input 子系统框架本文是基于kernel-3.18版本分析的。输入(Input)子系统是分层架构的,总共分为5 层,从上到下分别是:用户空间层(User Space)事件处理层(Event Handler)、输入子系统核心层(Input Core)、硬件驱动层(Input Driver) 、硬件设备层(Hardware)。驱动根据CORE提供的接口,向上报告发生的按键动作。...

2019-07-15 09:21:21 1014

原创 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 1059

原创 Android P PowerManagerService分析(一)

1、概述     PowerManagerService是负责管理、协调设备电源管理的系统服务之一,设备常见功能如亮灭屏、亮度调节、低电量模式、保持CPU唤醒等,都会通过PMS的协调和处理。其继承自SystemService,因此具有SystemService子类的共性:具有生命周期方法,由SystemServer启动、注册到系统服务中,通过Binder和其他组件进行交互等。其生命周期方法如下...

2019-05-20 22:52:01 5802 1

原创 Android P包管理机制之PackageManager简介

1.PackageManager简介与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能。PackageManager是一个抽象类,它的具体实现类为ApplicationPackageManager,ApplicationPackageManager中的方法会通过IPackageManager与AMS进行进程间...

2019-05-04 16:56:26 1653 1

原创 Android P输入法框架系统--输入法显示

1、程序焦点获取事件导致输入法显示    从上面可以知道程序获得焦点时,程序端会先间接的调用IMMS的startInput将焦点View绑定到输入法,然后会调用IMMS的windowGainFocus函数,这个函数就可能显示输入法, 是否显示输入法由焦点view的属性决定。过程流程图如下:代码处理逻辑如下://ViewRootImpl.javacase MSG_WINDOW_FOCUS_...

2019-04-07 17:54:27 1612

原创 Android P输入法框架系统--view绑定输入法过程

1、概述     IMMS如何处理view绑定输入法事件呢?为了讲解整个绑定过程,我们假设此时输入法service还没启动,这个情况下的输入法绑定是最长的,整个过程经历过如下过程:启动输入法service绑定输入法window的token请求输入法为焦点程序创建一个连接会话将输入法的接口传递回程序client端绑定输入法和焦点view     1-4是和程序相关的,而5是和vie...

2019-03-31 16:48:46 958

原创 Android P输入法框架系统--view如何触发绑定

    在PC时代,输入法的原始输入来自实体键盘,鼠标,然后输入法将这些事件对应的ASCII码转换为俄文,中文,当然如果是英文是不需要转换,直接发送即可。而在Android系统里,由于输入法dialog永远没法成为焦点window,所以输入法永远没法获取到按键事件,也就是说输入法的输入数据只能来自触摸事件,输入法显示出键盘(大家称之为软键盘),用户点击键盘UI, 然后输入法将触摸事件所在位置的字符...

2019-03-24 17:37:04 1101 1

原创 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 491

原创 Android性能剖析工具——simpleperf

谈到Android上的性能剖析,很多人会想到TraceView,SysTrace。TraceView擅长Method Tracing,与IDE集成,使用方便,不过有时候它的误差让人无法忍受;SysTrace的牛逼之处在于它可以给出整个系统的一些关键模块的性能信息,因此用途广泛。事实上,在AOSP中有另外一个性能剖析工具不为人知,这个安静的小可爱就是今天要介绍的主角—— simpleperf。我们...

2018-12-03 20:51:45 1863

原创 Android Traceview工具使用

1.概述Trracview性能分析功能另一利器。代码实现:Debug.startMethodTracing(“demo”);Debug.stopMethodTracing();视图:traceview参数说明:Name: 该线程运行过程中所调用的函数名Incl Cpu Time: 某函数占用的CPU时间,包含内部调用其它函数的CPU时间Excl Cpu Time: 某函数占用的...

2018-11-24 21:43:39 314

转载 android vsnc 工作原理

               &nbsp

2018-11-16 16:14:44 1008

转载 Android systrace性能工具使用说明

原文网址:http://gityuan.com/2016/01/17/systrace/一、概述保证系统流畅度,也就是保证系统能连续不间断地提供每秒60帧的运行状态。当出现掉帧时(也可称为Jank),需要知道当前整个系统所处的状态,systrace便是最佳的选择,它能手机检测android系统各个组件随着时间的运行状态,并能提示该如何有效地修复问题,接下来说说systrace如何使用以及如何解...

2018-10-20 17:02:11 1042

原创 Android bootchart工具使用说明

    Bootchart是一个用于linux启动过程性能分析的开源软件工具,在系统启动过程自动收集CPU占用率、进程等信息,并以图形方式显示分析结果,可用作指导优化系统启动过程。Android5.1之前已自带bootchart,但缺省时不被编译,需要显式指定编译。5.1之后的不用编译boot.img. 安装Bootchart 首先,在pc机上安装bootchart工具,命...

2018-09-19 11:03:18 1126

原创 AndroidO audio系统之AudioPolicyService分析(三)

1.AudioPolicyService基础AudioPolicy在Android系统中主要负责Audio”策略”相关的问题。它和AudioFlinger一起组成了Android Audio系统的两个服务。一个负责管理audio的“路由”,一个负责管理audio“设备”。在Android O 版本的系统中,这两个服务都是在系统启动的过程中,通过main_audioserver.cpp来加载的。...

2018-07-27 22:01:36 6585 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 4940

原创 AndroidO audio系统之框架简介(一)

1、概述       Audio系统在Android中负责音频方面的数据流传输和控制功能,也负责音频设备的管理,它是Android中最复杂的子系统之一。本文将粗略分析一下audio的整体框架及播放、录制流程。不足之处,敬请指正,谢谢!2、音频框架图 2.1 Application层       音频相关的应用软件有: 音乐播放器,电话,声音设置,视频播放器等等。...

2018-07-13 18:01:13 13463 4

原创 Android 8.0 系统启动流程之zygote进程(八)

前言在上一篇中我们讲到,init进程会解析.rc文件,并介绍了.rc文件中的语法规则。其中不乏有许多service启动,这些service通常不是普通的服务,文档里面的称呼是daemon(守护进程). 所谓守护进程就是这些服务进程会在系统初始化时启动,并一直运行于后台,直到系统关闭时终止. 我们本篇讲的zygote进程就是其中之一,zygote进程主要负责 创建Java虚拟机,加载系统资源...

2018-06-30 22:00:26 1839 2

原创 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 4455

原创 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 11793 2

原创 Android 8.0 系统启动流程之init进程--第二阶段(五)

1、概述    上一篇中讲了init进程的第一阶段,我们接着讲第二阶段,主要有以下内容创建进程会话密钥并初始化属性系统进行SELinux第二阶段并恢复一些文件安全上下文新建epoll并初始化子进程终止信号处理函数设置其他系统属性并开启系统属性服务2、创建进程会话密钥并初始化属性系统由于之前第一阶段最后有设置INIT_SECOND_STAGE,所以在第二阶段is_fir...

2018-06-09 00:09:45 2807

原创 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 4085 4

原创 Android 8.0 系统启动流程之Linux内核启动--kernel_init进程(三)

    在上一篇文章中详细的分析了kthreadd进程的启动,init进程也是有idle进程去触发启动的,init进程分为前后两部分,前一部分是在内核启动的,主要是完成创建和内核初始化工作,内容都是跟Linux内核相关的;后一部分是在用户空间启动的,主要完成Android系统的初始化工作。     本文着重分析init进程的前一部分,init进程的后一部分将在下一篇文章中讲述。1、init进...

2018-05-27 13:45:03 4402 1

原创 Android 8.0 系统启动流程之Linux内核启动--kthreadd进程(二)

    在上一篇文章中详细的分析了idle进程的启动,idle进程启动过程中会启动init进程与kthreadd进程,本文将详细分析kthreadd进程的启动过程。1、kthreadd进程启动由上篇文章分析可知,在rest_init函数中启动了kthreadd进程static noinline void __init_refok rest_init(void){ .....

2018-05-18 13:41:20 2283 1

转载 AndroidO Treble架构下HIDL服务Java框架实现

前面介绍了HIDL服务在native层的实现过程,包括HIDL服务加载创建、服务注册、服务查询过程等,那么Java层是否也实现了相关的服务框架呢? 通常情况下,所有的Hal都实现在native层面,每个hal进程都是一个native进程,由init进程启动,在hal进程启动时会完成HIDL服务注册...

2018-05-12 17:21:37 2411 2

转载 AndroidO Treble架构下HIDL服务查询过程

通过前面的分析我们知道,Hal进程启动时,会向hwservicemanager进程注册hidl服务,那么当Framework Server需要通过hal访问硬件设备时,首先需要查询对应的hidl服务,那么Client进程是如何查询hidl服务的呢?这篇文章将展开分析,这里再次以IComposer为...

2018-05-12 17:20:00 1125

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除