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

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

一. 背景:

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

二 .Input 系统核心线程

InputReader and InputDisapatcher

1. 该两个线程在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> 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两个线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值