自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (10)
  • 问答 (1)
  • 收藏
  • 关注

原创 ActivityManagerService启动之旅(一)

一、AMS的简介 ActivityManagerService,简称AMS。如果没有学习它的话,你可能会对他感觉到神秘而复杂。如果你学习了解之后就会觉得它并不那么神秘但是确实很复杂。AMS的主要工作就是:Activity的管理,service的管理,brocastreceiver的管理,进程管理和APP Crash的管理,其实APP crash涉及到的知识主要还是Activity的管理和进程管理这两部分知识。AMS还管控其他事情,比如,app的耗电量,性能,近期列表等,有些朋友可能会说近期列表是...

2020-06-24 17:44:18 1963

原创 Android深入理解 ANR 触发原理:InputManager

五InputDispatching Timeout 在看这篇博文,大家可以参考看gityuan 《Input系统—InputDispatcher线程》 《Input系统—ANR原理分析》ANR时间区间便是指当前这次的事件dispatch过程中执行findFocusedWindowTargetsLocked()方法到下一次执行resetANRTimeoutsLocked()的时间区间. 以下5个时机会reset. 都位于InputDispatcher.cpp文件: resetAndDr...

2021-04-10 13:55:27 2206 1

原创 Android 深入理解 ANR 触发原理:ContentProvider

四 ContentProvider Timeout4.1attachApplicationLocked private boolean attachApplicationLocked(@NonNull IApplicationThread thread, int pid, int callingUid, long startSeq) { // Find the application record that is being attached......

2021-04-09 20:16:53 3317

原创 Android 深入理解 ANR 触发原理:Broadcast

三、BroadcastReceiver Timeout3.1 processNextBroadcastLocked在学习Broadcast timeout 之前最好对广播的发生流程有一定了解,可以参考gityuan大神《Android Broadcast广播机制分析》。在广播流程有基础后,我们之间看最关键的代码块processNextBroadcastLocked,在看后面的代码之前我们同样提两个问题:1.broadcast 什么情况下会ANR ? 2.ANR会有哪些log。 final vo

2021-04-09 18:04:56 2861 2

原创 Android 保证进程广播可以发生出去

在Android O版本之后对广播增加了很多限制,可以如下修改intent = new Intent(intent);//增加该flag,则广播不会发送给已停止的packageintent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);//当没有启动完成时,不允许启动新进程if (!mProcessesReady && (intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRAD

2021-04-08 20:45:27 270

原创 Android 深入理解 ANR 触发原理:Service

一、概述 ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close,并不是所有的ANR都会有提示框,文字后面会给出答案那么哪些场景会造成ANR呢?Service Timeout:比如前台服务在20s内未执行完成,后台60s未完成;...

2021-04-08 19:54:45 4627

原创 Android 深入理解 Watchdog的原理

带着问题去阅读源码是最有效的!一、概述: 1.1 本文围绕以下几个问题点来学习Watchdog:1.Watchdog的工作原理是什么? 2.发生了Watchdog后系统会做什么?有哪些关键的打印信息? 1.2Watchdog是作用 Android系...

2021-04-08 17:08:29 1272

原创 Android Bootup Debug思路

坚持总结如果机器在开机过程中出现死机和重启的情况,可以由以下几点的Debug思路:一、抓取log 一份正常启动log,一份异常启动log。log部分包括logcat和串口log,如果是mtk平台 的话,可以抓取mtklog 和串口log。如果有NE或者ANR的相应的log也一并导出,anr:data/anr ,aee:data/aee_exp二、定位异常发生的阶段性这部分就需要在log中找相应的启动关键字。如果找到关键字,再定位具体发生错误的代码和函数,也可以对比正常的log,来找...

2021-03-20 17:04:28 411

转载 安卓ANR问题1_ANR问题类型及产生原理

ANR问题类型及产生原理ANR(Application Not Responding):即应用无响应. 在日常使用安卓手机的过程中, 对最anr最直接的印象就是手机弹框显示应用未响应. 选择继续等待或者关闭.如果应用程序的主线程在规定的时间内, 没有完成特定操作和事件, 就会发生ANR.四种ANR类型KeyDispatchTimeout : input事件在5S内没有处理完成发生ANR ServiceTimeout : bind,create,start,unbind等操作,前台Servic

2021-03-11 15:30:56 816 1

转载 android 关机流程详细分析(转)

前面的博客有提到过android事件上报流程,InputReaderThread 从EventHub读到按键事件后,交给InputDispatcher 往上上报,我们从这里跟踪一下长按power键关键流程,frameworks/native/services/inputflinger/InputDispatcher.cpp void InputDispatcher::notifyKey(const NotifyKeyArgs* args) { … mPolicy-&g.

2020-10-09 15:21:54 2763

原创 Android SystemUI之Recent,近期列表(五)

一、近期任务列表启动 1.近期列表View结构图 2.NavigationBarFragment.onRecentsClick和NavigationBarFragment.onRecentsTouch结合上个博客导航栏,我们可以知道近期列表的启动入口是onRecentsTouch和onRecentsClickonRecentsTouch private boolean onRecentsTouch(View v, MotionEvent event) {...

2020-09-10 21:12:13 4324 4

原创 Android SystemUI之NavigationBar,导航栏(四)

一、导航栏的创建 1.先上一幅导航栏的View结构图。如下。 2.导航栏的创建

2020-09-10 18:51:16 6506

原创 Android SystemUI之下拉菜单,通知栏,快捷面板(三)

一、下拉菜单创建流程 在上一个博文(Android SystemUI之StatusBar,状态栏(二))的开篇有给出一个图,里面描述了StatusBar的设备树。super_status_bar会分两个分支一个是状态栏,这个上个博文已经讲了,另一个就是下拉菜单,QS面板。也是本博文需要讲解的。在说下拉菜单创建的过程我们先看两副图这死下拉菜单两种不同的布局,现在我们就来好好分析这两个布局的创建流程。1.QSFragment的创建status_bar_expande...

2020-09-10 16:15:18 10995 5

原创 Android SystemUI之StatusBar,状态栏(二)

一、

2020-09-09 19:05:55 8867 5

原创 Android SystemUI之启动流程(一)

一、简介 SystemUI是系统最重要的一个APK,它属于persistent app,什么是persistent app呢?简单的来说就是,具有系统签名,并且在AndroidMainfest中声明persistent=true,如果是使用flag来匹配查找的话:ApplicationInfo.FLAG_PERSISTENT。目前系统具有这类app还有com.mediatek.ims(短信),com.android.phone(电话)。这类的app是在android系统环境准备完成之后...

2020-07-09 15:50:37 4080

原创 ActivityManagerService之进程管理(四)

一、初步了解AMS的进程管理 引用邓凡平的深入理解系列的一些知识1. Linux进程调度优先级和调度策略调度优先级和调度策略是操作系统中一个很重要的概念。简而言之,它是系统中CPU资源的管理和控制手段。如何理解?此处进行简单介绍。读者可自行阅读操作系统方面的书籍以加深理解。·相对于在OS上运行的应用进程个数来说,CPU的资源非常有限。·调度优先级是OS分配CPU资源给应用进程时(即调度应用进程运行)需要参考的一个指标。一般而言,优先级高的进程将更有机会得到CPU资...

2020-07-07 17:07:10 1173

原创 ActivityManagerService之深入理解Activity启动流程(二)

一、Activity启动方式 activity的启动方式大体可以分三种: 1.通过桌面点击app图标方式启动 2.通过代码的方式启动startActivity ...

2020-07-03 18:42:21 2597

原创 ActivityManagerService之深入理解Activity启动流程(三)

一、Activity启动方式 activity的启动方式大体可以分三种: 1.通过桌面点击app图标方式启动 2.通过代码的方式启动startActivity ...

2020-07-03 18:34:28 1041

原创 android adb install apk的安装流程

一、简介 1.Android上应用安装可以分为以下几种方式:通过adb命令安装:adb 命令包括adb push/install 用户下载的Apk,通过系统安装器packageinstaller安装该Apk。packageinstaller是系统内置的应用程序,用于安装和卸载应用程序。 系统开机时安装系统应用。 电脑或者手机上的应用商店自动安装第三种系统安装我们在上个章节P...

2020-04-17 11:32:45 11326 1

原创 Android PackageManagerService 启动流程

目录: 一、PackageManagerService启动流程 二、apk adb安装流程一、简介: PackageManagerService,是Android系统中核心服务之一,管理着所有跟package相关的工作,常见的比如安装、卸载应用。下面是PackageManagerService的启动流程...

2020-04-16 17:16:14 1639

原创 Linux ALSA声卡驱动之七:录音(Capture) 调用流程

一、录音(Capture)调用时间时序图 从上面的时序图能看出,tingyalsa的调用是通过open的方式来调用底层驱动函数。上面图片不够清晰可以看这个pdf文档(//download.csdn.net/download/Bill_xiao/12260596). 1.1 tinyalsa调用 tinyalsa 录音:tinycap...

2020-03-21 21:03:01 6412 1

原创 Linux ALSA声卡驱动之六:PCM的注册流程

一、PCM设备的基础介绍 PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制。我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲,把这些脉冲的幅值按一定的精度进行量化,这些量化后的数值被连续地输出、传输...

2020-03-21 12:33:10 3059 1

原创 C 左移 和右移 计算

一、定义 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 ‘<<’左移:右边空出的位置补0,其值相当于乘以2。 ‘>>’右移:左边空出的位,如果是正数则补0,若为负数则补0或1 其值相当于除以2. 简单口诀: 左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方 右移一位都相当于除以2的1次方,左移n位就相当于...

2020-03-14 13:22:34 5037

原创 C 语言 逻辑计算过程!!(a) 的作用

C语言中!是逻辑运算符,叫作逻辑非。什么是逻辑运算--逻辑运算用来判断一件事情是“对”的还是“错”的,或者说是“成立”还是“不成立”,判断的结果是二值的,即没有“可能是”或者“可能不是”,这个“可能”的用法是一个模糊概念,在计算机里面进行的是二进制运算,逻辑判断的结果只有二个值,称这二个值为“逻辑值”,用数的符号表示就是“1”和“0”。其中“1”表示该逻辑运算的结果是“成立”的,如果一个...

2020-03-10 20:42:02 4397

原创 Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册

一、Machine 简介Machine是指某一款机器,可以是某款设备,某款开发板,又或者是某款智能手机,由此可以看出Machine几乎是不可重用的,每个Machine上的硬件实现可能都不一样,CPU不一样,Codec不一样,音频的输入、输出设备也不一样,Machine为CPU、Codec、输入输出设备提供了一个载体,用于描述一块电路板,它指明此块电路板上用的是哪个Platform和哪...

2020-03-10 18:29:42 4587 2

原创 Linux ALSA声卡驱动之四:Codec 以及Codec_dai

一. Codec简介 在移动设备中,Codec的作用可以归结为4种,分别是:对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号 对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号 对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的 对音频信号做出相...

2020-03-10 15:44:53 5818

原创 Linux ALSA声卡驱动之三:Platform之Cpu_dai

一、CPU_DAI驱动在ASoC中的作用 从上一章Linux ALSA声卡驱动之二:Platform我们知道platform负责管理音频数据,把音频数据通过dma或其他操作传送至cpu dai中,cpu_dai则主要完成cpu一侧的dai的参数配置。在cpu_dai的代码后,确实是作为参数配置来使用。其中最关键的代码片段是mtk_dai_stub_daistatic struct...

2020-03-10 11:42:44 3511

原创 Linux ALSA声卡驱动之二:Platform

1.Platform驱动在ASoC中的作用 ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC有把Platform驱动分为两个部分:snd_soc_platform_drive...

2020-03-09 21:27:33 4071

原创 Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介

一. ALSA 简介 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供...

2020-03-09 19:45:42 5590

原创 电源管理之充电动画

一、充电动画的启动入口 充电动画是通过通过启动 kpoc_charger.rc的方式启动kpoc_charger.rc的内容:on charger start kpoc_charger //充电打印服务service kpoc_charger /system/bin/kpoc_charger class charger //充电服务所以充电动...

2019-11-14 16:40:32 1724

原创 SELinux 安全机制实践应用

当你有所得,最好是用文字总结记录,这才是进步的关键!! --------20191009一、先了解一下SELinux的安全机制DAC和MACSELinux出现之前,Linux上的安全模型叫DAC,全称是Discre...

2019-10-09 21:06:04 509

转载 Android 杀死进程从上层到底层(转)

基于Android 6.0的源码剖析, 分析kill进程的实现原理,以及讲讲系统调用(syscall)过程,涉及源码:/framework/base/core/java/android/os/Process.java/framework/base/core/jni/android_util_Process.cpp/system/core/libprocessgroup/process...

2019-09-19 14:50:33 1667

原创 JNI数据类型探究

java和C++的参数传递都是分值传递和引用传递,基本类型就是值传递,引用类型是地址传递。JNI的是用C++写的,所以引用类型也是地址传递,比如string。一、如果是基本数据类型就比较好处理直接使用强转的方式,比如int a=10;jint b=(jint)a;需要注意的是jchar的是16位,而C++的是8位。所以在数据转换的时候要注意,否则可能出现乱码之类的情况。二、引用类型...

2019-08-23 15:23:51 383

原创 我的第一个Android 驱动程序,驱动层 到framworks层

对于未知的技术我们心里总是比较忐忑,当你走进发现原来并不是你想象中那么难,关键是我们需要勇敢迈出第一步----------Bill 2019.08.23 本文分两部分:一、驱动层的添加 二、framworks层的代码添加,以及应用层的调用。一、驱动层的添加 1.向内核添加我的驱动程序 ...

2019-08-23 10:56:37 761

转载 Android异常分析

关于异常异常?异常就是一种程序中没有预料到的问题,既然是没有预料到的,就可能不在原有逻辑处理范围内,脱离了代码控制,软件可能会出现各种奇怪的现象。比如:android系统常见异常现象有应用无响应、应用停止运行、冻屏、重启、死机等,这些异常系统有统一的异常处理机制,出现异常系统就会执行相应的操作,最终有相应的现象体现出来。另外,一些不在预料之中的界面显示问题,操作问题,运行卡顿问题等也可以归...

2019-07-06 12:42:53 681

原创 JNI 动态注册和静态注册的详解

对于未知的技术我们心里总是比较忐忑,但是当你攻下这个技术领域的时候又是一种满满的收获,坚持探索----------Bill 2019.04.08 本博文采用问答的方式讲解JNI的动态注册和静态注册的方式 1. 什么是JNI? JNI的英文缩写是 java nativie interface ,按照字面解释就是java 本地接口。什么样的接口才叫nativi...

2019-04-08 19:33:39 2334

转载 Android ANR 分析学习总结(转)

1. 什么情况下会发生anr(1). KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应(2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成(3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处...

2019-03-05 13:53:29 556

原创 左移右移运算 的目的

在C语言中或者java中常常会出现这样的标示&gt;&gt; &lt;&lt; 比如int a=10 a&gt;&gt;2这样看很难看清楚是什么意思,需要转换成二进制来标示10二进制的标示为:1010 1010向右移动两位是:0010=2;这样的位移操作的目的不仅仅是为了得到2,而且是一种节省内存的存储方式,我们知道int 类型可以存储32位字节,那么如果你存储...

2019-02-28 22:21:49 1510

原创 Java 方法使用到底是值传递还是引用传递

一、定理: 1.如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 2. 如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝 简单的理解这句话的意思:数据类型是基本类型 ------------------值传递。 数据类型是引用类型-...

2019-02-28 14:29:07 217

原创 SystemUI之SIMLock 锁卡UI界面流程梳理

一、锁卡背景介绍  锁卡即SIMLock,当手机开机启动或者插入SIM卡时,手机modem侧预置在NV项中的配置信息会与SIM卡中的信息做比对,检测是否匹配。若匹配,则SIM卡可以正常使用。若不匹配,则SIM卡相关功能均无法正常使用,例如拨打电话、发送短信及上网等;或者是只能注册2G网,不能注册4G。  锁卡的目的:一些运营商会要求控制某一类卡的使用,从而保护自己的利益(运营商定制机)  SIML...

2018-05-25 10:36:16 4612

AMS_activity_start.pdf

AMS_activity_start activity的启动流程

2020-07-02

AMS_START.pdf

AMS 时序图

2020-06-23

adb_install_sequence.pdf

adb_install_sequence apk安装流程

2020-04-15

PackageManagerService.pdf

这是 PackageManagerService.pdf

2020-04-15

录音时序图(Capture 流程图)

录音时序图 (Capture 流程图)

2020-03-21

mt_soc_snd_init.pdf

mt_soc_snd_init 结构体图

2020-03-10

Machine时序图.pdf

Machine 时序图

2020-03-10

JNI动态注册 方式

JNI动态注册 。

2019-04-08

JIN静态注册 方式

JIN静态注册方式 。

2019-04-08

frameworks层面实现静默安装

frameworks层面实现 静默安装

2019-03-05

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

TA关注的人

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