android 初始化流程,Android input 系统初始化和启动流程

Input 系统核心线程之初始化和启动流程

一. 背景:

做Android touch 驱动时,设备在开机的时加载动画(kernel 层已load OK),若用手连续点击屏幕,待完全设备开机后UI 没有反应,但是touch依然正常报点,多点触摸时会临时恢复,但finger release 后依然恢复原样(UI没反应),初入行做驱动,借助前人的智慧,追了一下touch事件上报处理流程。

二 .Input 系统核心线程

InputReader and InputDisapatcher

该两个线程在IMS(InputManagerService)服务中伴随着system_server进程的启动而启动,整个调用过程:

InputManagerService(IMS初始化)

nativeInit

NativeInputManager

EventHub

InputManager

InputDispatcher

Looper

InputReader

QueuedInputListener

InputReaderThread

InputDispatcherThread

IMS.start(启动)

nativeStart

InputManager.start

InputReaderThread->run

InputDispatcherThread->run

1.1初始化过程

private void startOtherServices(); framworks/base/services/java/com/android/server/SystemServer.java

inputManager = new InputManagerService(context);

public InputManagerService(Context context) framworks/base/services/core/java/com/android/server/input/InputManagerService.java

mPtr = nativeInit(this, mContext, mHandler.getLooper().getQueue());

static jlong nativeInit framworks/base/services/core/jni/com_android_server_input_InputManagerService.cpp

NativeInputManager* im = new NativeInputManager(contextObj, serviceObj,messageQueue->getLooper()) ; framworks/base/services/core/jni/com_android_server_input_InputManagerService.cpp

NativeInputManager::NativeInputManager framworks/base/services/core/jni/com_android_server_input_InputManagerService.cpp

(1)sp eventHub = new EventHub();

EventHub::EventHub(void); frameworks/native/services/inputflinger/EventHub.cpp

(2)mInputManager = new InputManager(eventHub, this, this);

InputManager::InputManager frameworks/native/services/inputflinger/InputManager.cpp

(1)mDispatcher = new InputDispatcher(dispatcherPolicy);

InputDispatcher::InputDispatcher frameworks/native/services/inputflinger/InputDispatcher.cpp

(2)mReader = new InputReader(eventHub, readerPolicy, mDispatcher);

InputReader::InputReader frameworks/native/services/inputflinger/InputReader.cpp

(3)initialize();

mReaderThread = new InputReaderThread(mReader);

InputReaderThread::InputReaderThread

mDispatcherThread = new InputDispatcherThread(mDispatcher);

InputDispatcherThread::InputDispatcherThread

1.2启动过程:

public void start() frameworks/base/services/core/java/com/android/server/input/InputManagerService.java

nativeStart(mPtr); framworks/base/services/core/jni/com_android_server_input_InputManagerService.cpp

static void nativeStart(JNIEnv* env, jclass /* clazz */, jlong ptr)

status_t result = im->getInputManager()->start();

status_t InputManager::start() + frameworks/native/services/inputflinger/InputManager.cpp

result = mDispatcherThread->run("InputDispatcher", PRIORITY_URGENT_DISPLAY);

result = mReaderThread->run("InputReader", PRIORITY_URGENT_DISPLAY);

Java层InputManagerService:采用android.display线程处理Message.

JNI的NativeInputManager:采用android.display线程处理Message,以及创建EventHub。

Native的InputManager:创建InputReaderThread和InputDispatcherThread两个线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值