Android
文章平均质量分 92
pecuyu
学不可以已。积跬步,以至千里。
展开
-
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 · 1635 阅读 · 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 · 1826 阅读 · 1 评论 -
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 · 2922 阅读 · 0 评论 -
Android 12 init(4) 子进程回收与服务重启分析
在init运行过程中,不可避免的会出现子进程或服务退出,需要做一些针对性处理:在init中通过监听信号 SIGCHLD,来获取子进程终止事件,然后做一些针对性动作。初始化信号处理器,注册子进程终止的监听UnblockSignals在子进程执行该函数,即子进程默认是不阻塞这些信号的。当epoll监听到signal_fd有事件到来,即产生了相关信号,则会回调HandleSignalFd来处理处理 SIGCHLD 会调用ReapAnyOutstandingChildren,它实现了所有终止子进程的回收R原创 2022-12-11 23:51:27 · 1638 阅读 · 0 评论 -
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 · 1310 阅读 · 0 评论 -
Android 12 init(2) rc脚本解析和事件执行流程
文章托管在gitee上, 同步csdn本文基于Android12 分析在init启动的SecondStage,通过调用LoadBootScripts来解析启动脚本,也就是rc文件。下面来研究这个解析过程,之后再看看init如何处理事件并执行相关action的。原创 2022-11-29 23:17:00 · 1714 阅读 · 0 评论 -
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 · 2801 阅读 · 0 评论 -
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 · 1307 阅读 · 0 评论 -
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 · 3155 阅读 · 1 评论 -
Android 12 应用Java crash流程分析
android 应用 java crash 目前为止,Android应用进程是通过zygote进程fork出来的子进程,然后执行一些应用相关的初始化,最后进入应用入口—ActivityThread的main方法。应用在main方法中调用attachApplication通知系统应用启动完成,同时注册IApplicationThread对象到系统进程(通过linkToDeath监听其死亡),最后应用进入主消息循环后就正常运行起来了。通过以上分析,可以总结出应用Javacrash机制处理的三个阶段。.....原创 2022-07-21 23:58:00 · 1452 阅读 · 0 评论 -
Android 12 关机重启流程
文章托管在gitee上 Android Notes , 同步csdn本文基于Android12 分析关机流程Android上层触发关机的入口很多,但最终几乎都是调用ShutdownThread.shutdown来实现。如下是一些常见的调用关机的点:StatusBarManagerService#shutdown, 这个主要是对接SystemUIWindowManagerService#shutdown, 以WindowManagerFuncs接口提供给系统其他模块使用,诸如GlobalAct.原创 2022-05-22 21:15:49 · 6219 阅读 · 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 · 3766 阅读 · 0 评论 -
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 · 2565 阅读 · 0 评论 -
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 · 1138 阅读 · 0 评论 -
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 · 1293 阅读 · 0 评论 -
Android 12 Watchdog(1) 介绍与启动
Watchdog 介绍Watchdog的功能实际上是一个监控程序,用于监测系统进程运行状态,以确保系统处于正常运转状态。当系统关键线程出现卡住或其他一些异常情况发生时,一些系统关键服务可能无法正常工作,当卡住过长时间时,Watchdog会重启系统(框架层面),以确保用户能够正常使用设备。Watchdog的功能大致如下:监听系统关键Handler是否能及时处理消息,实际上是判断其关联的线程是否卡住监听系统Binder线程是否异常,是否处于starve状态监听系统关键服务是否出现了死锁超时或者执行调原创 2022-04-29 21:33:57 · 2051 阅读 · 0 评论 -
Android R PointerEventDispatcher 触摸事件监听帮助类
文章托管在gitee上 Android Notes , 同步csdnPointerEventDispatcher 介绍PointerEventDispatcher类的功能如同名字描述的那样,它是一个触摸事件分发类. 使用者通过registerInputEventListener(PointerEventListener listener) 方法向它注册事件监听,当有事件到来时,它的onInputEvent(InputEvent event)方法会被调用到, 然后将事件分发给所有的监听者. 当不需要监.原创 2021-10-23 21:44:20 · 3189 阅读 · 0 评论 -
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 · 1987 阅读 · 0 评论 -
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 · 2031 阅读 · 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 · 2839 阅读 · 0 评论 -
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 · 1609 阅读 · 0 评论 -
Android R input (一) 之 InputManagerService 的建立
文章托管在gitee上 Android Notes , 同步csdnInputManagerService 介绍InputManagerService是重要的系统服务,负责Android输入系统的管理,职责包括但不限于:输入设备的管理输入事件的加工m输入事件的派发与反馈输入事件的派发ANR的检测常见的输入设备是触摸屏/按键,其他支持的设备还有键盘,鼠标等. 当有新输入设备可用时,Linux内核会在/dev/input/下创建对应的名称类似eventX(X>=0)的设备节点。当输入.原创 2021-10-23 21:11:50 · 1560 阅读 · 0 评论 -
Android R WindowManagerService 添加window过程分析 (二)
本篇是接上一篇Android R WindowManagerService 添加window过程分析 (一), 分析addWindow part3 , 这部分的主要工作有:创建 WindowState 对象, 用于管理窗口的各种信息displayPolicy调整客户端传过来的params参数, 使用策略执行诸如确保特定类型的窗口无法获得输入焦点之类的操作displayPolicy 检查窗口是否能被添加到系统. 如对于某一个Display,只能添加一个StatusBar判断是否要创建 InputCh原创 2021-04-23 16:26:46 · 1291 阅读 · 0 评论 -
Android R WindowManagerService 添加window过程分析 (一)
有一段时间没有在这边发博客了,之前的笔记都写在有道云笔记上. 使用有道随记还是不错的,但是通常缺乏体系. 后面会将之前的笔记整理总结出来.希望可以坚持下去吧, 加油.WIndowManagerService的内容相对来说比较庞杂, 需要花费很大气力才能真正理解它. 本篇是从添加window 的角度去分析它, 将它拆分为多个部分,进而层层分析.WindowManager#addView通常,我们都是通过WindowManager#addView方法来添加窗口. WindowManager的具体实现.原创 2021-04-06 14:42:43 · 1952 阅读 · 0 评论 -
Android SparseArray源码分析
一、概述最近看一些关于Android性能优化方面的书,有讲到了使用Android提供的SparseArray代替Java的HashMap来存储key-value键值对,一定程度上能够提升性能,但是SparseArray也有一定的局限性,比如key的类型固定为int,存储的元素个数过大时对性能有较大的影响等。平时使用过SparseArray,但是未进行深入研究,藉此机会来学习一下。二...原创 2017-10-26 10:42:39 · 520 阅读 · 0 评论 -
Android SoundPool 的使用
概述最近工作接触到Android 中的 SoundPool 类,使用后发觉很是有意思,记录一下以备后查。Android 开发中,难免会碰到音视频相关的处理。SoundPool 是 Android 提供的一个API类,用来播放简短的音频,使用简单但功能相对强大。只需花很少的气力,就可以完成音频的播放、暂停、恢复及停止等操作。从名字上也可以看出,它是一个“pool”,我们可以加载多个音频资源到内存...原创 2018-09-23 22:04:00 · 24821 阅读 · 0 评论 -
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 · 5758 阅读 · 8 评论 -
安卓学习笔记之使用WindowManger创建浮窗
使用步骤通过getSystemService获得WindowManager对象创建并加载一个布局view,用于添加到窗体通过WindowManager.LayoutParams的参数设置浮窗的显示属性将view添加到窗体添加回调接口,用于在外部使用时调节浮窗原创 2016-04-17 22:59:52 · 523 阅读 · 0 评论 -
安卓学习笔记之自定义Toast
安卓学习笔记之CustomToast原创 2016-04-10 00:27:42 · 523 阅读 · 0 评论 -
安卓学习笔记之理解Window与WindowManager
Window的概念对于Android的Window而言,实际上是一个相对抽象的概念。从Window的定义可以看出,Window是对窗体的一种抽象,是顶级Window的外观与行为策略。目前仅有的实现类是PhoneWindow,可以使用它来创建Window(对系统而言)。 public abstract class Window { // Window 样式相关静态常量等原创 2016-08-28 21:10:17 · 5314 阅读 · 2 评论 -
Android Activity之Window的创建过程
一、 Activity的创建概述通常,使用startActivity(intent)来启动一个Activity,或者当需要返回一个结果的时候我们可能会调用startActivityForResult(intent, requestCode)方法。但不管使用那个方法,都最终会startActivityForResult(intent, requestCode, options) 来启动Acti...原创 2017-12-16 15:37:17 · 3464 阅读 · 0 评论 -
安卓学习笔记之自定义ViewGroup
涉及的知识点 - ViewGroup的测量与布局 - View的测量与布局 - 滑动冲突的处理 - VelocityTracker滑动速率跟踪 - Scroller实现弹性滑动 - 屏幕宽高的获取等原创 2016-08-11 09:48:47 · 664 阅读 · 0 评论 -
安卓学习笔记之HandlerThread
一 、HandlerThread简介从字面意思上看,它既与Handler有关系又与Thread有联系。确实如此,它继承自Thread,是一个线程类,同时又内嵌Looper对象。因此,用它开启的线程的内部可以直接创建一个Handler,并可以与主线程交互。关于Looper和Handler的协作请参考安卓学习笔记之android消息机制二、源码分析 1、构造方法,用于设置线程名和初始化线程优先级。原创 2016-09-08 22:04:20 · 594 阅读 · 0 评论 -
安卓学习笔记之IntentService浅析
一、原理概述 IntentService是通过内部的ServiceHandler(Handler)与HandlerThread来完成任务的。每当有意图任务时,IntentService的onStartCommand方法会被调用,它内部调用了onStart方法,在onStart方法中向ServiceHandler发消息,ServiceHandler收到消息后会调用onHandleIntent方法来原创 2016-09-09 10:01:28 · 609 阅读 · 0 评论 -
安卓学习笔记之自定义ContentProvider
自定义provider类继承ContentProvider原创 2016-05-14 20:31:38 · 507 阅读 · 0 评论 -
安卓学习笔记之骚扰拦截
安卓学习笔记之骚扰拦截原创 2016-03-29 14:13:56 · 1217 阅读 · 0 评论 -
安卓学习笔记之多线程下载
安卓多线程 数据库原创 2016-04-14 23:24:17 · 2689 阅读 · 0 评论 -
安卓学习笔记之实现通用的适配器(adapter)与ViewHolder
安卓学习笔记之adapter与ViewHolder原创 2016-03-27 15:05:34 · 700 阅读 · 0 评论 -
安卓学习笔记之json
json的数据结构与解析原创 2016-04-10 16:42:04 · 655 阅读 · 0 评论 -
安卓学习笔记之自定义组合控件
自定义组合控件原创 2016-04-04 15:52:29 · 537 阅读 · 0 评论