自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

pecuyu

积跬步,至千里!

  • 博客(79)
  • 资源 (23)
  • 收藏
  • 关注

原创 Android 12 init(6) Subcontext进程工作过程分析

在init启动过程中,会启动一个subcontext进程,通常与init有着不一样的 secontext 以及 mount namespace。该进程用来接收来自init的命令,用来执行某些操作,这些操作是在 subcontext 的secontext 和 mount namespace 下进行。通过ps命令看看init及subcontext进程信息。

2022-12-17 21:14:43 1372 1

原创 Android 12 init(5) start&stop命令流程分析

通常,在开发过程中,需要push一些修改到系统分区,之后需要重启系统使修改生效。不过,执行stop、start命令需要root权限,这点需要注意。接下来分析这两个命令的执行流程。执行start/stop程序,它的本体实际上是toolbox。执行命令可以指定特定服务,表示要启动、停止对应服务start/stop通过设置控制属性 ctl.start、ctl.stop 来启动、停止服务init 处理 ctl.start、ctl.stop属性事件,执行启动、停止服务的操作。

2022-12-15 23:59:00 1458 1

原创 Android 12 init(4) 子进程回收与服务重启分析

在init运行过程中,不可避免的会出现子进程或服务退出,需要做一些针对性处理:在init中通过监听信号 SIGCHLD,来获取子进程终止事件,然后做一些针对性动作。初始化信号处理器,注册子进程终止的监听UnblockSignals在子进程执行该函数,即子进程默认是不阻塞这些信号的。当epoll监听到signal_fd有事件到来,即产生了相关信号,则会回调HandleSignalFd来处理处理 SIGCHLD 会调用ReapAnyOutstandingChildren,它实现了所有终止子进程的回收R

2022-12-11 23:51:27 1369

原创 Android 12 init(3) 属性服务

在 init 的启动第二阶段,启动属性服务线程,提供相关属性服务,给其他进程提供设置属性的支持,并通知init去处理属性事件。PropertyInitCreateSerializedPropertyInfo从相关property_contexts文件读取到context信息,并将内容序列化,然后写入 /dev/properties/property_infoPropertyInfoEntry 定义如下,它用来存储解析后的context信息查看 /system/etc/selinux/plat_p

2022-11-30 23:32:04 1162

原创 Android 12 init(2) rc脚本解析和事件执行流程

文章托管在gitee上, 同步csdn本文基于Android12 分析在init启动的SecondStage,通过调用LoadBootScripts来解析启动脚本,也就是rc文件。下面来研究这个解析过程,之后再看看init如何处理事件并执行相关action的。

2022-11-29 23:17:00 1462

原创 Android 12 init(1) 启动流程分析

init是 Android 启动的第一个用户空间进程,它的地位非常重要,它fork产生系统的一些关键进程(如zygote,surfaceflinger进程),而zygote进一步fork产生system_server和其他应用进程,通过这套逻辑构建了Android的进程层次结构体系。init进程的功能包含但不限于以下:通过ps命令看看init进程信息在启动内核的start_kernel函数流程中,会调用run_init_process函数执行init程序,来启动init进程在Android中执行的init

2022-11-29 23:06:21 2481

原创 Android12 am命令的使用及实现流程分析

在shell通过命令am,可以输出该命令的帮助信息,常用的命令如下几大组件相关的命令,通过名字大概知道用途还有其他比较有用的命令:在命令行执行am命令am使用示例以dumpheap命令为例,其可以指定进程的名字或pid:执行命令:当adb shell 进入后直接执行 am dumpheap system_server, 会抛出上面一个异常,说找不到这个进程,不过换成 system 就可以。从错误的调用栈可以知道,这个命令是通过 Binder#shellCommand 来实现的,am具体的实现在Ac

2022-10-29 23:46:38 2601

原创 Android 12 Java trace 生成过程分析

在分析一些Android问题,比如ANR或Watchdog冻屏时,需要拿到相关进程的Java trace,然后分析是哪出了问题。但是这个Java trace是怎么生成的呢?在Android中的Java进程一般都是运行在art虚拟机之上的,而要拿到相关进程的Java trace,则需要它来完成相关dump操作。根据代码实现也能说明这一点,在art里面运行了一个 SignalCatcher 线程,专门用来处理这个逻辑。SignalCatcher 线程启动后,会循环等待 SIGQUIT (信号3)的发生,当收到S

2022-09-23 00:35:41 1099

原创 Android 12 进程native crash流程分析

在Android中,crash大致可以做如下分类:本篇主要是看 Native crash 抓log流程。实现机制主要是基于信号机制和ptrace机制,如下:流程大致如下图所示:接下来,从 linker 的入口_start开始看起。如何分析入口可见参考。__linker_init__linker_init_post_relocationlinker的一些初始化,主要看linker_main函数linker_mainlinker_debuggerd_initdebuggerd_initd

2022-09-04 14:18:46 2597 1

原创 Android 12 应用Java crash流程分析

android 应用 java crash 目前为止,Android应用进程是通过zygote进程fork出来的子进程,然后执行一些应用相关的初始化,最后进入应用入口—ActivityThread的main方法。应用在main方法中调用attachApplication通知系统应用启动完成,同时注册IApplicationThread对象到系统进程(通过linkToDeath监听其死亡),最后应用进入主消息循环后就正常运行起来了。通过以上分析,可以总结出应用Javacrash机制处理的三个阶段。.....

2022-07-21 23:58:00 1246

原创 Android 12 关机重启流程

文章托管在gitee上 Android Notes , 同步csdn本文基于Android12 分析关机流程Android上层触发关机的入口很多,但最终几乎都是调用ShutdownThread.shutdown来实现。如下是一些常见的调用关机的点:StatusBarManagerService#shutdown, 这个主要是对接SystemUIWindowManagerService#shutdown, 以WindowManagerFuncs接口提供给系统其他模块使用,诸如GlobalAct.

2022-05-22 21:15:49 5104 4

原创 Android 12 Watchdog(5) 案例分析集

文章托管在gitee上 Android Notes , 同步csdn通常判断是否是发送Watchdog,可以通过以下log:查看 /data/anr 目录下是否生成 Watchdog trace 文件events log中查看 watchdog event. 在Watchdog#run的方法中打印event事件 // If we got here, that means that the system is most likely hung. // First collect .

2022-04-29 21:54:18 3235

原创 Android 12 Watchdog(4) Trace生成过程

文章托管在gitee上 Android Notes , 同步csdnTrace生成流程从第2篇可知,Watchdog的Trace生成过程如下:当等待时间 >Max/2 , 即评估状态为 WAITED_HALF,则会输出第一次Trace当等待时间 >Max, 即评估状态为 OVERDUE,则会输出第二次Trace,以及一些其他的信息(kernel log,binder相关信息,dropbox等)最终,会将两次生成的Trace合二为一,生成一个最终的Trace。下面看判断条件}.

2022-04-29 21:50:42 2327

原创 Android 12 Watchdog(3) monitor实现

文章托管在gitee上 Android Notes , 同步csdn这一篇看一些系统模块的monitor实现。接下来看3个比较典型的场景:ActivityManagerService的monitor实现InputManagerService的monitor实现,涉及native检查Binder线程的monitor实现Watchdog.Monitor定义如下,实现该接口的类,可以注册到Watchdog作为一个被监听的对象:public interface Monitor { voi.

2022-04-29 21:45:35 1046

原创 Android 12 Watchdog(2) 工作流程

文章托管在gitee上 Android Notes , 同步csdnWatchdog 工作流程概述如上篇所述,当调用Watchdog#start方法时,启动其内部工作线程,之后它的run方法会被调用,Watchdog在此线程中执行监控逻辑。Watchdog的工作概述如下:CHECK_INTERVAL周期遍历HandlerChecker列表的所以元素,调用HandlerChecker#scheduleCheckLocked方法来执行检测操作,具体实现是向对应HandlerChecker的Hand.

2022-04-29 21:38:57 1140

原创 Android 12 Watchdog(1) 介绍与启动

Watchdog 介绍Watchdog的功能实际上是一个监控程序,用于监测系统进程运行状态,以确保系统处于正常运转状态。当系统关键线程出现卡住或其他一些异常情况发生时,一些系统关键服务可能无法正常工作,当卡住过长时间时,Watchdog会重启系统(框架层面),以确保用户能够正常使用设备。Watchdog的功能大致如下:监听系统关键Handler是否能及时处理消息,实际上是判断其关联的线程是否卡住监听系统Binder线程是否异常,是否处于starve状态监听系统关键服务是否出现了死锁超时或者执行调

2022-04-29 21:33:57 1912

原创 Android R PointerEventDispatcher 触摸事件监听帮助类

文章托管在gitee上 Android Notes , 同步csdnPointerEventDispatcher 介绍PointerEventDispatcher类的功能如同名字描述的那样,它是一个触摸事件分发类. 使用者通过registerInputEventListener(PointerEventListener listener) 方法向它注册事件监听,当有事件到来时,它的onInputEvent(InputEvent event)方法会被调用到, 然后将事件分发给所有的监听者. 当不需要监.

2021-10-23 21:44:20 2830

原创 Android R Input (五) 之ANR的产生与显示流程

文章托管在gitee上 Android Notes , 同步csdn在InputDispatcher的工作流程中,分析过过ANR相关的部分内容,这一篇来详细分析ANR的产生与显示流程ANR 的检查在InputDispatcher的dispatchOnce方法中,会在执行完事件派发与Commands后,通过processAnrsLocked方法处理ANR./// @frameworks/native/services/inputflinger/dispatcher/InputDispatcher..

2021-10-23 21:40:40 1794

原创 Android R input (四) 之 InputChannel之发送事件处理反馈

文章托管在gitee上 Android Notes , 同步csdnClient处理完input事件后, 会向ims发送finish反馈信号,即向对端的server InputChannel发送反馈, server 端InputChannel被InputDispatcher所管理 .这个操作通常在InputEventReceiver的finishInputEvent方法.InputEventReceiver#finishInputEvent/// @frameworks/base/core/jav.

2021-10-23 21:35:32 1856 1

原创 Android R input (三) 之 InputDispatcher 工作流程

文章托管在gitee上 Android Notes , 同步csdnInputDispatcher 的创建如前所述,InputDispatcher 是在 InputManager 构造方法中通过工厂方法createInputDispatcher 创建.此处的policy 实际上就是 NativeInputManager, 它是相关策略的实现类sp<InputDispatcherInterface> createInputDispatcher( const sp<.

2021-10-23 21:26:18 2432

原创 Android R input (二) 之 InputReader 工作流程

文章托管在gitee上 Android Notes , 同步csdnInputReader 的创建如前所述,InputReader是在 InputManager 构造方法中通过工厂方法createInputReader创建,在此方法中,还创建了EventHub作为构造参数. 此处的policy即NativeInputManager对象,listener的值实际上是mDispatcher的封装./// @frameworks/native/services/inputflinger/reader/I.

2021-10-23 21:21:38 1516

原创 Android R input (一) 之 InputManagerService 的建立

文章托管在gitee上 Android Notes , 同步csdnInputManagerService 介绍InputManagerService是重要的系统服务,负责Android输入系统的管理,职责包括但不限于:输入设备的管理输入事件的加工m输入事件的派发与反馈输入事件的派发ANR的检测常见的输入设备是触摸屏/按键,其他支持的设备还有键盘,鼠标等. 当有新输入设备可用时,Linux内核会在/dev/input/下创建对应的名称类似eventX(X>=0)的设备节点。当输入.

2021-10-23 21:11:50 1454

原创 Android R WindowManagerService 添加window过程分析 (二)

本篇是接上一篇Android R WindowManagerService 添加window过程分析 (一), 分析addWindow part3 , 这部分的主要工作有:创建 WindowState 对象, 用于管理窗口的各种信息displayPolicy调整客户端传过来的params参数, 使用策略执行诸如确保特定类型的窗口无法获得输入焦点之类的操作displayPolicy 检查窗口是否能被添加到系统. 如对于某一个Display,只能添加一个StatusBar判断是否要创建 InputCh

2021-04-23 16:26:46 1183

原创 Android R WindowManagerService 添加window过程分析 (一)

有一段时间没有在这边发博客了,之前的笔记都写在有道云笔记上. 使用有道随记还是不错的,但是通常缺乏体系. 后面会将之前的笔记整理总结出来.希望可以坚持下去吧, 加油.WIndowManagerService的内容相对来说比较庞杂, 需要花费很大气力才能真正理解它. 本篇是从添加window 的角度去分析它, 将它拆分为多个部分,进而层层分析.WindowManager#addView通常,我们都是通过WindowManager#addView方法来添加窗口. WindowManager的具体实现.

2021-04-06 14:42:43 1734

原创 App not allowed to read or update stored WiFi Ap config

修改Settings 发现的一个问题,记录一下.问题代码,使用WifiManager获取Wi-Fi AP 配置: mWifiConfig = mWifiManager.getWifiApConfiguration();需要权限: android.Manifest.permission.ACCESS_WIFI_STATE android.Manifest.permission.OVER...

2018-10-16 10:21:43 5531 8

原创 Android SoundPool 的使用

概述最近工作接触到Android 中的 SoundPool 类,使用后发觉很是有意思,记录一下以备后查。Android 开发中,难免会碰到音视频相关的处理。SoundPool 是 Android 提供的一个API类,用来播放简短的音频,使用简单但功能相对强大。只需花很少的气力,就可以完成音频的播放、暂停、恢复及停止等操作。从名字上也可以看出,它是一个“pool”,我们可以加载多个音频资源到内存...

2018-09-23 22:04:00 24294

原创 JNI笔记 : 在JNI中使用引用

1 概述在Java中,通常分为四种引用类型,分别是:强引用、软引用、弱引用以及虚引用。对于一个Java对象来说,当被强引用所引用时,只要该对象可达,就不会被GC回收;当被软引用所引用时,当内存不足时才有可能会被回收;当被弱引用所引用时,该对象随时都可能被GC回收;而当被虚引用所引用时,可以当做没有引用一样,一般用来判断一个对象是否被回收了。由此可知,引用类型是比较关键的,它决定了一个Jav...

2018-07-08 00:03:23 5199

原创 C语言 实现一个二叉树

1、概述二叉树是一种特殊的树,每个父节点最多只有2个直接子孩子,每个节点也只有一个直接父节点(根节点默认无父节点)。我们实现类似下图所示的二叉树(图片来源网络): 可以看出,该树满足一般二叉树的特性:包含一个树根节点每个节点都最多只有2个直接子孩子每个子孩子也最多只有一个父节点随着树深度的增加,所能容纳的元素也是成倍增长。宽度呈指数级增长,高度增长相对较缓慢等等对二叉...

2018-06-24 23:19:13 785

原创 Android Activity之Window的创建过程

一、 Activity的创建概述通常,使用startActivity(intent)来启动一个Activity,或者当需要返回一个结果的时候我们可能会调用startActivityForResult(intent, requestCode)方法。但不管使用那个方法,都最终会startActivityForResult(intent, requestCode, options) 来启动Acti...

2017-12-16 15:37:17 3350

原创 Android SparseArray源码分析

一、概述最近看一些关于Android性能优化方面的书,有讲到了使用Android提供的SparseArray代替Java的HashMap来存储key-value键值对,一定程度上能够提升性能,但是SparseArray也有一定的局限性,比如key的类型固定为int,存储的元素个数过大时对性能有较大的影响等。平时使用过SparseArray,但是未进行深入研究,藉此机会来学习一下。二...

2017-10-26 10:42:39 470

原创 JNI笔记 : 数据类型、JNI函数与签名

1 JNI技术简单介绍首先应该介绍什么是JNI,JNI是Java Native Interface的缩写,中文翻译Java本地接口, 也有译为Java本地调用。JNI是Java语言中的一门强大的技术,由于Android上层采用Java语言实现,所以也可以在Android中使用这门技术。 JNI技术主要是完成Java代码与native代码进行交互,简单说就是用Java代码调用native语言编

2017-09-13 22:08:15 10999

原创 C语言 内存管理的细枝末节

1、 一些细枝末节的概念 - 作用域、链接、存储时期1. 作用域 (scope) 作用域限定了程序中可以访问一个标识符一个或多个区域. C语言中,一个变量的作用域可以是代码块作用域,函数原型作用域或者文件作用域等。一个代码块是包含在花括号{}之间的一段代码。在代码块中定义的变量具有代码块作用域 (block scope),从该变量被定义的地方到代码块结束均可见。函数的形式参量尽管在

2016-12-25 17:04:48 943 1

原创 C语言 实现一个双链表

1 头文件编写如下doublelinklist.h头文件#pragma oncetypedef int _TYPE; // 数据类型typedef struct DoubleLinkListNode{ struct DoubleLinkListNode* pPre; // 前一个节点指针 struct DoubleLinkListNode* pNext; // 后一个节点指针

2016-12-12 19:48:33 3371

原创 C语言 指针的细枝末节

1 内存与地址在说指针之前,肯定得说一说内存与地址了,因为指针的很多概念都与之相关. 内存是什么 从硬件形态上说,内存就是一条形物理设备,从功能上讲,内存是一个数据仓库,程序内在执行前都要被装载到内存中,才能被中央处理器执行。内存是由按顺序编号的一系列存储单元组成的,在内存中,每个存储单元都有唯一的地址,通过地址可以方便地在内存单元中存储信息。内存中的数据要靠供电来维持,当计算机关机或意外断

2016-12-10 19:08:55 1806 2

原创 C语言 结构体与共用体

1 结构体1.1 什么是结构体?结构体是C语言中的一种数据类型,它有如下特点1) 结构体是一种构造数据类型2) 把不同类型的数据组合成一个整体来自定义数据类型1.2 结构体的定义方式与结构体变量的声明1) 定义形式定义结构体类型的同时定义结构体变量,形式如下struct 结构体名{ 类型标识符 成员名; 类型标识符 成员名; …

2016-12-05 19:07:04 11650 11

原创 MySQL数据库操作与单表操作(CRUD)

声明:以下操作都是基于MySQL5.7.13这个版本的 1 MySQL数据库操作常见的MySQL数据库管理涉及如下操作:开启关闭MySQL服务查询所有数据库 创建数据库 查看数据库信息与修改数据库的默认字符集删除数据库等1.0 开启关闭MySQL服务1.0.1 通过命令行的方式在cmd命令行下输入如下命令来开启mysql数据库服务: net start mysql;在cm

2016-11-05 16:12:21 7450

原创 MySQL存储引擎与数据类型

1 数据存储引擎存储引擎的概念是MySQL的一个特性,它指定了表的类型(诸如表如何存储与索引数据、是否支持事务、外键等),表在计算机中的存储方式。1.1 MySql支持的数据存储引擎查看引擎信息通过命令来查看引擎信息 show engines;默认存储引擎为InnoDB,如下列出: Engine Support Comment Transactions XA Savepo

2016-11-03 20:59:52 2987

原创 C语言 基本输入输出函数

1 几组常见的输入输出函数在stdio.h头文件中内置了几种输入输出函数,如下列出:printf 与 scanfgetchar 与 putchargets 与 puts 相比之下 printf 与 scanf的功能最为强大,但操作稍显复杂,后两种则功能简单,但针对性较强。2 printf函数功能:按照规定格式输出指定数据2.1.一般形式:如图 格式控制:由“%”后跟格式字符组成。将输出数据转

2016-11-03 15:07:57 88622 6

原创 MySQL5.7.13更改密码时出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'

记录一下这个坑,MySQL5.7.13更改密码时出现ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’。windows下使用免安装版本的mysql5.7.13,各种需要自己配置。步骤如下(使用cmd最好在管理员权限下):1.首先在环境变量中配置path:D:\Program Files\MySQL\MySQL Server 5.

2016-10-25 20:55:46 6916 2

原创 细说 Java NIO

前言:本篇主要用于梳理NIO的相关知识,诸如缓冲区、通道、文件锁、选择器,附带的会说一下IO的知识,因为在某些地方NIO会用到它们。鉴于NIO已经出来甚久,本文旨在总结知识与交流学习,同时若能给他人带来一点帮助,那也是一份意外收获。1、IO (java.io.*)在前面的两篇博客Java之IO流—字节流、Java之IO流—字符流,我们详细的梳理了字节流与字符流的体系与使用细节,并没有对他们两者做一个

2016-10-10 15:36:41 2924 2

SoundPool 的使用

一个简单的sample , 用来理解及测试SoundPool的相关功能 相关博客 https://blog.csdn.net/qq_28261343/article/details/82818868

2018-09-23

使用 SoundPool

一个简单的sample , 用来理解及测试SoundPool的相关功能 https://blog.csdn.net/qq_28261343

2018-09-18

二叉树实现

C语言 实现一个二叉树 ,参考博客 https://blog.csdn.net/qq_28261343/article/details/80795782

2018-06-24

双链表C语言实现

双链表C语言实现,详细参考博客 https://blog.csdn.net/qq_28261343/article/details/53584995#t40

2018-06-03

native_helper

android native helper ..........................................................................................................................................................资源分这么从1起步了.....................................................................................................................................................................

2017-09-14

bat编译脚本

auto flash

2017-07-18

compare the file

compare

2017-07-17

操作系统课程ppt

清华大学 操作系统 向勇

2016-11-27

操作系统-向勇

操作系统 清华大学 向勇

2016-11-27

使用RemoteView发送通知栏消息,模拟下载进度

使用RemoteView发送通知栏信息,模拟下载进度,可暂停、继续

2016-11-25

手机安全卫士

手机安全卫士

2016-11-13

Android Utils

安卓开发常用工具类。大约70个,注意某些工具类是有依赖类库的,使用时要下载相应的类库。

2016-11-08

mysql-5.7.13-winx64

mysql-5.7.13-winx64 ,,

2016-10-25

细说Java NIO

Java NIO技术的使用合辑

2016-10-10

Java反射与动态代理

Java反射机制与动态代理

2016-10-04

Java反射机制

Java反射机制与动态代理

2016-10-03

Java之Thread

Java多线程的学习,结合实例更清楚~

2016-10-01

java之io流实例

java之io流实例应用。

2016-09-28

java集合框架

java集合合辑,包含Collection与Map两大部分,有大量示例代码

2016-09-23

java集合框架之Collection实例解析

java集合框架之Collection部分,包括List与Set的常用类,示例多,且皆有详细注释。

2016-09-22

安卓各种动画

涵盖了补间动画、布局动画、属性动画的使用,实现多种效果

2016-08-27

安卓Drawable的使用

演示了各种Drawable的效果,以及自定义Drawable

2016-08-25

MyScrollView

自定义ViewGroup 涉及的知识点 - ViewGroup的测量与布局 - View的测量与布局 - 滑动冲突的处理 - VelocityTracker滑动速率跟踪 - Scroller实现弹性滑动 - 屏幕宽高的获取等

2016-08-11

空空如也

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

TA关注的人

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