由浅入深学习android input系统(五) - input系统的启动
android input系列文章
由浅入深学习android input系统(一) - input事件如何传递到View
由浅入深学习android input系统(二) - input事件如何传递到app进程( InputDispatcher )
由浅入深学习android input系统(三) - InputChannel解析
由浅入深学习android input系统(四) - input事件采集(InputReader)
由浅入深学习android input系统(五) - input系统的启动
概述
前文已经讲过了input系统对事件的抓取以及传递,此文将探索下input系统的启动。
前文:由浅入深学习android input系统(四) - input事件采集(InputReader)
input系统的初始化
调用的任务栈如下:
- SystemServer.main()
- SystemServer.run()
- InputManagerService构造函数
- InputManagerService.nativeInit()
- com_android_server_input_InputManagerService.nativeInit()
- NativeInputManager构造函数
- InputManager构造函数
InputManager构造函数中初始化了两部分:
- 初始化InputReader与InputDispatcher
- 初始化InputReaderThread与 InputDispatcherThread
InputManager::InputManager(const sp<InputReaderInterface>& reader,const sp<InputDispatcherInterface>& dispatcher) :mReader(reader),mDispatcher(dispatcher) {initialize();
}
void InputManager::initialize() {mReaderThread = new InputReaderThread(mReader);mDispatcherThread = new InputDispatcherThread(mDispatcher);
}
input系统的启动
调用的任务栈如下:
- SystemServer.main()
- SystemServer.run()
- InputManagerService.start()
- InputManagerService.nativeStart()
- com_android_server_input_InputManagerService.nativeStart()
- InputManager.stat()
InputManager的start()方法中分别启动了InputReaderThread与InputDispatcherThread。
status_t InputManager::start() {status_t result = mDispatcherThread->run("InputDispatcher", PRIORITY_URGENT_DISPLAY);if (result) {ALOGE("Could not start InputDispatcher thread due to error %d.", result);return result;}result = mReaderThread->run("InputReader", PRIORITY_URGENT_DISPLAY);if (result) {ALOGE("Could not start InputReader thread due to error %d.", result);mDispatcherThread->requestExit();return result;}return OK;
}
InputReaderThread
要点如下:
- 运行了run()方法后,最终会执行到threadLoop()方法,这个方法只有在执行requestExit()后才会停止循环
- threadloop()中执行了InputReader.loopOnce()方法,开始接收硬件的事件。
对InputReader.loopOnce()的内容由兴趣的读者可以看下前面的文章:
InputReaderThread::InputReaderThread(const sp<InputReaderInterface>& reader) :Thread(/*canCallJava*/ true), mReader(reader) {
}InputReaderThread::~InputReaderThread() {
}bool InputReaderThread::threadLoop() {mReader->loopOnce();return true;
}
InputDispatcherThread
要点如下:
- 运行了run()方法后,最终会执行到threadLoop()方法,这个方法只有在执行requestExit()后才会停止循环
- threadloop()中执行了InputDispatcher.dispatchOnce()方法,开始分发从InputReader那边接收的事件。
对InputDispatcher.dispatchOnce()的内容由兴趣的读者可以看下前面的文章:
InputDispatcherThread::InputDispatcherThread(const sp<InputDispatcherInterface>& dispatcher) :Thread(/*canCallJava*/ true), mDispatcher(dispatcher) {
}InputDispatcherThread::~InputDispatcherThread() {
}bool InputDispatcherThread::threadLoop() {mDispatcher->dispatchOnce();return true;
}
由浅入深学习android input系统(五) - input系统的启动相关推荐
- 由浅入深 学习 Android Binder(十一) binder线程池
Android Binder系列文章: 由浅入深 学习 Android Binder(一)- AIDL 由浅入深 学习 Android Binder(二)- bindService流程 由浅入深 学习 ...
- 由浅入深 学习 Android Binder(一)- AIDL
Android Binder系列文章: 由浅入深 学习 Android Binder(一)- AIDL 由浅入深 学习 Android Binder(二)- bindService流程 由浅入深 学习 ...
- Android 网页h5 Input选择相机和系统相册
需求: 网页h5的input选择相机和系统相册,并且返回压缩的图片到h5. 代码: 1.WebView代码 package com.zql.sdk;import android.app.Activit ...
- 解决 input 输入框在 iOS 系统中无法输入内容
问题 input 输入框在 Android 系统可以输入和点击,但是在 iOS 系统上 input 输入框无法点击和输入. 解决方法 方案一:在代码中查找并去掉下列样式 -webkit-touch-c ...
- Android菜鸟如何学习Android系统开发?
如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类 ...
- Android菜鸟如何学习Android系统开发?(
如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类 ...
- Android Studio的学习相关--推荐几个可以系统学习Android的网站
推荐几个可以系统学习Android的网站 廖雪峰的官方网站:Java教程 Android 开发者:Android Studio用户指南 AndroidDevTools 菜鸟教程:Android基础入门 ...
- ios与mac系统,input输入时,自带的输入法会出现重复显示问题
问题:ios与mac系统,input输入时,自带的输入法会出现重复显示问题 解决方法:以不允许输入表情为例 需要为安卓及ios进行兼容处理 先区分系统再调用对应方法 ios: // ios不让输入表情 ...
- IOS系统中input标签获取焦点页面会放大的问题
IOS系统中input标签获取焦点页面会放大的问题 在iOS系统中打开网页,input框输入时,输入框获取焦点的时候页面会放大,如果没有经过设置,页面放大之后就不会自动还原.使内容撑开浏览器,底部产生 ...
- Google Filament 源码学习(六):Material System (五) - 材质系统框架
目录 Introduction Filament 工程简化 删除 Filament 工程中非核心内容 根目录保留 build文件夹中保留 filament文件夹中保留 libs文件夹中保留 third ...
最新文章
- JSON.parse()与JSON.stringify()的区别
- Python中的高效的集合操作
- winform响应时间最长是多少分钟_了解这个,你的爬升勋章分分钟手到擒来!
- numpy均匀分布_Python计算类库(Numpy)
- SAP两款CRM产品各方面比较:SAP CRM vs SAP Cloud for Customer
- springboot + redis
- 单例模式(Java)
- Transfomer入门:Self-attention + Multi-head Self-attention
- 外威客外包网站Elance
- 6_python基础—循环
- 加入rtp组播_耗时10+小时撰写 带你系统认识组播 收藏这些概念
- 【信号与系统】信号频谱和测量之汉明窗
- python统计形容词权重然后排序
- CSS 引入的三种方式
- javaweb_util_excel模板横向纵向循环
- EMV技术学习和研究(一)开篇
- 雨伞16骨好还是24骨好_伞骨什么材质好 晴雨伞骨数越多越好吗
- android 8.0 屏蔽首次开机弹出的‘即将完成 Android 更新’的弹窗
- 博客园电子期刊2012年9月刊发布啦
- 黑客攻击-程序破解(1)
热门文章
- android的wifi开发码源,亚美电游app下载 -官方网站
- 用vue-cli3导入外部的iconfont.css图标样式遇到的坑:These relative modules were not found:...
- php 逻辑思维题,倘若3分钟内,你能答对这道智力题,说明你的逻辑思维能力很强...
- linux后门rootkit程序介绍
- python中dispatch_在django,dispatch的用途是什么?
- IE7绿色版下载-转载
- pack_padded_sequence torch说明
- php更改文件为只读,word只读模式怎么修改
- 大厂面试预备篇——《两万字MySql基础总结》❤️建议收藏
- 文件截取\裁剪工具软件