一. Input 系统的初始化
1. InputManagerService
是由SystemServer建立的
在frameworks/base/services/java/com/android/server/SystemServer.java中
-
class ServerThread extends Thread {
-
@Override
-
public void run() {
-
HandlerThread wmHandlerThread = new HandlerThread("WindowManager");
-
wmHandlerThread.start();
-
Handler wmHandler = new Handler(wmHandlerThread.getLooper());
-
context = ActivityManagerService.main(factoryTest);
-
-
InputManagerService inputManager = null;
-
//1.1 new的过程创建InputReader InputDispatcher和EventHub
-
inputManager = new InputManagerService(context, wmHandler);
-
inputManager.setWindowManagerCallbacks(wm.getInputMonitor());
-
//1.2 start的过程:将InputReader与InputDispatcher的线程跑起来
-
inputManager.start();
-
-
display.setInputManager(inputManager);
-
}
-
}
1.1 new的调用过程
SystemServer:: new InputManagerService
-->
InputManagerService构造函数
在frameworks/base/services/java/com/android/server/input/InputManagerService.java中
-
public InputManagerService(Context context, Handler handler)
-
{
-
this.mContext = context;
-
this.mHandler = new InputManagerHandler(handler.getLooper());
-
mPtr = nativeInit(this, mContext, mHandler.getLooper().getQueue());
-
}
SystemServer:: new InputManagerService
-->
InputManagerService构造函数
--> nativeInit ;;通过jni调用
在frameworks/base/services/jni/com_android_server_input_InputManagerService.cpp 中
-
static jint nativeInit(JNIEnv* env, jclass clazz, jobject serviceObj, jobject contextObj, jobject messageQueueObj)
-
{
-
sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueObj);
-
NativeInputManager* im = new NativeInputManager(contextObj, serviceObj, messageQueue->getLooper());
-
im->incStrong(serviceObj);
-
return reinterpret_cast<jint>(im);
-
}
SystemServer:: new InputManagerService
-->
InputManagerService构造函数
--> nativeInit ;;通过jni调用
NativeInputManager的构造
-->
NativeInputManager ;;new一个EventHub和InputManager
在frameworks/base/services/jni/com_android_server_input_InputManagerService.cpp中
-
NativeInputManager::NativeInputManager(jobject contextObj, jobject serviceObj, const sp<Looper>& looper) : mLooper(looper)
-
{
-
JNIEnv* env = jniEnv();
-
mContextObj = env->NewGlobalRef(contextObj);
-
mServiceObj = env->NewGlobalRef(serviceObj);
-
AutoMutex _l(mLock);
-
mLocked.systemUiVisibility = ASYSTEM_UI_VISIBILITY_STATUS_BAR_VISIBLE;
-
mLocked.pointerSpeed = 0;
-
mLocked.pointerGesturesEnabled = true;
-
mLocked.showTouches = false;
-
-
sp<EventHub> eventHub = new EventHub();
-
mInputManager = new InputManager(eventHub, this, this);
-
}
SystemServer:: new InputManagerService
-->
InputManagerService构造函数
--> nativeInit ;;通过jni调用
NativeInputManager的构造
-->
NativeInputManager构造 ;;new一个EventHub和InputManager
-->
InputManager构造 ;;new InputDispatcher和InputReader及其线程
在frameworks/base/services/input/InputManager.cpp中
在
InputManager的构造函数中,又建立了InputDispatcher和InputReader
-
InputManager::InputManager(const sp<EventHubInterface>& eventHub,
-
const sp<InputReaderPolicyInterface>& readerPolicy,
-
const sp<InputDispatcherPolicyInterface>& dispatcherPolicy) {
-
mDispatcher = new InputDispatcher(dispatcherPolicy);
-
mReader = new InputReader(eventHub, readerPolicy, mDispatcher);
-
initialize();
-
}
同时又建立了InputDispatcher和InputReader各自的线程
-
void InputManager::initialize() {
-
mReaderThread = new InputReaderThread(mReader);
-
mDispatcherThread = new InputDispatcherThread(mDispatcher);
-
}
1.2 start的调用过程
SystemServer:: InputManagerService
.start
-->
InputManagerService::start ;;调用jni
在frameworks/base/services/java/com/android/server/input/InputManagerService.java中
-
public void start() {
-
nativeStart(mPtr);
-
}
SystemServer:: InputManagerService
.start
-->
InputManagerService::start ;;调用jni
--> nativeStart
;;通过jni调用
NativeInputManager的start
在frameworks/base/services/jni/com_android_server_input_InputManagerService.cpp 中
-
public void start() {
-
nativeStart(mPtr);
-
}
SystemServer:: InputManagerService
.start
-->
InputManagerService::start ;;调用jni
--> nativeStart
;;通过jni调用
NativeInputManager的start
-->
NativeInputManager::nativeStart ;;调用InputManager的start
在frameworks/base/services/jni/com_android_server_input_InputManagerService.cpp中
-
static void nativeStart(JNIEnv* env, jclass clazz, jint ptr) {
-
NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
status_t result = im->getInputManager()->start();
-
}
SystemServer:: InputManagerService
.start
-->
InputManagerService::start ;;调用jni
--> nativeStart
;;通过jni调用
NativeInputManager的start
-->
NativeInputManager::nativeStart ;;调用InputManager的start
-->
InputManager::start ;;让InputDispatcher和InputReader的线程跑起来
在frameworks/base/services/input/InputManager.cpp中
-
status_t InputManager::start() {
-
mDispatcherThread->run("InputDispatcher", PRIORITY_URGENT_DISPLAY);
-
mReaderThread->run("InputReader", PRIORITY_URGENT_DISPLAY);
-
return OK;
-
}
阅读(916) | 评论(0) | 转发(0) |