当前位置: 首页 > wzjs >正文

腾讯企业邮箱入口网页版关键词seo优化排名

腾讯企业邮箱入口网页版,关键词seo优化排名,微信公众号平台建立,网站建设实训报告InputManagerService(IMS)作为 Android 系统中的一个关键服务,在系统的启动过程中由 SystemServer 进程启动。SystemServer 负责启动和管理系统中几乎所有的核心服务,包括 AMS、PMS、WMS 和 IMS 等。 一、InputManagerService启动…

        InputManagerService(IMS)作为 Android 系统中的一个关键服务,在系统的启动过程中由 SystemServer 进程启动。SystemServer 负责启动和管理系统中几乎所有的核心服务,包括 AMS、PMS、WMS 和 IMS 等。

一、InputManagerService启动流程

1、SystemServer

源码位置:/frameworks/base/services/java/com/android/server/SystemServer.java

private void startOtherServices(@NonNull TimingsTraceAndSlog t) {WindowManagerService wm = null;InputManagerService inputManager = null;……try {……// 创建IMS实例inputManager = new InputManagerService(context);……// 创建并初始化WMS实例wm = WindowManagerService.main(context, inputManager, !mFirstBoot, mOnlyCore,new PhoneWindowManager(), mActivityManagerService.mActivityTaskManager);// 将WMS和IMS注册到系统服务列表中ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false,DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);ServiceManager.addService(Context.INPUT_SERVICE, inputManager,/* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);……// 设置从WMS返回的回调接口。这允许IMS在处理输入事件时可以通知WMS有关状态的变化inputManager.setWindowManagerCallbacks(wm.getInputManagerCallback());// 启动IMS,使其开始监听和处理来自各种输入设备的事件inputManager.start();……} catch (Throwable e) {throw e;}……
}

        这里在 SystemServer 的初始化过程中,InputManagerService 和 WindowManagerService 被创建出来,并将 WindowManagerService 中的 monitor 传给了 InputManagerService ,作为回调。最后调用 InputManagerService 的 start() 方法启动服务。

2、InputManagerService构造

InputManagerService

源码位置:/frameworks/base/services/core/java/com/android/server/input/InputManagerService.java

public InputManagerService(Context context) {this.mContext = context;this.mHandler = new InputManagerHandler(DisplayThread.get().getLooper());……mPtr = nativeInit(this, mContext, mHandler.getLooper().getQueue());……
}private static native long nativeInit(InputManagerService service,Context context, MessageQueue messageQueue);

        InputManagerService 的构造方法中执行了 nativeInit,这是个 native 方法,属于 jni 调用。

nativeInit

源码位置:/frameworks/base/services/core/jni/com_android_server_input_InputManagerService.cpp

static const JNINativeMethod gInputManagerMethods[] = {{"nativeInit","(Lcom/android/server/input/InputManagerService;Landroid/content/Context;Landroid/os/""MessageQueue;)J", (void*)nativeInit},……
}static jlong nativeInit(JNIEnv* env, jclass /* clazz */,jobject serviceObj, jobject contextObj, jobject messageQueueObj) {sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueObj);if (messageQueue == nullptr) {jniThrowRuntimeException(env, "MessageQueue is not initialized.");return 0;}NativeInputManager* im = new NativeInputManager(contextObj, serviceObj,messageQueue->getLooper());im->incStrong(0);return reinterpret_cast<jlong>(im);
}

        可以看到该方法中创建了一个 NativeInputManager 实例,并且和 Java 层使用的是同一个 looper。

NativeInputManager::NativeInputManager(jobject contextObj,jobject serviceObj, const sp<Looper>& looper) :mLooper(looper), mInteractive(true) {……InputManager* im = new InputManager(this, this);mInputManager = im;defaultServiceManager()->addService(String16("inputflinger"), im);
}

        通过这个构造函数,NativeInputManager 不仅初始化了自身,还创建了一个核心的本地服务——InputManager,并将其注册到系统服务管理器中。 

InputManager

源码位置:/frameworks/native/services/inputflinger/InputManager.cpp

InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy,const sp<InputDispatcherPolicyInterface>& dispatcherPolicy) {// 创建 InputDispatcher 实例mDispatcher = createInputDispatcher(dispatcherPolicy);mClassifier = new InputClassifier(mDispatcher);// 创建 InputReader 实例mReader = createInputReader(readerPolicy, mClassifier);
}

        InputManager 的构造函数展示了如何初始化输入系统的两个主要组件:InputDispatcher 和 InputReader,并通过 InputClassifier 来增强对输入事件的处理能力。 

createInputReader

源码位置:/frameworks/native/services/inputflinger/reader/InputReaderFactory.cpp

sp<InputReaderInterface> createInputReader(const sp<InputReaderPolicyInterface>& policy,const sp<InputListenerInterface>& listener) {return new InputReader(std::make_unique<EventHub>(), policy, listener);
}

        这里创建了 InputReader 实例,它是 Android 输入系统中负责从底层硬件读取原始输入事件并进行解析的核心组件之一。通过 createInputReader 函数,EventHub、策略接口和监听器接口被组合在一起,以初始化一个 InputReader 实例。 其中 EventHub 就是将数据从硬件驱动上读出来然后传递上来的通道。

3、InputManagerService启动

        在 SystemServer 中还调用了 InputManagerService 的 start() 方法,这里我们在来看下。

InputManagerService.start

public void start() {Slog.i(TAG, "Starting input manager");// 调用本地代码,启动输入管理的核心功能nativeStart(mPtr);// 将服务添加到看门狗中监控Watchdog.getInstance().addMonitor(this);// 注册设置观察者\设置广播接收器、即时更新等……
}private static native void nativeStart(long ptr);

        该方法负责启动输入管理服务并注册一些必要的设置观察者和广播接收器,以便在系统状态或用户设置发生变化时更新输入管理服务的行为。

nativeStart

源码位置:/frameworks/base/services/core/jni/com_android_server_input_InputManagerService.cpp

static const JNINativeMethod gInputManagerMethods[] = {……{"nativeStart", "(J)V", (void*)nativeStart},……
}static void nativeStart(JNIEnv* env, jclass /* clazz */, jlong ptr) {NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);status_t result = im->getInputManager()->start();if (result) {jniThrowRuntimeException(env, "Input manager could not be started.");}
}

        这里获取 InputManager 并调用它的 start() 方法。

InputManager.start

status_t InputManager::start() {// 启动 InputDispatcherstatus_t result = mDispatcher->start();if (result) {ALOGE("Could not start InputDispatcher thread due to error %d.", result);return result;}// 启动 InputReaderresult = mReader->start();if (result) {ALOGE("Could not start InputReader due to error %d.", result);mDispatcher->stop();return result;}return OK;
}

        InputManager::start() 是 Android 输入系统中用于启动输入管理器(InputManager)的关键方法。它的主要职责是依次启动 InputDispatcher 和 InputReader,确保输入事件的分发和读取流程能够正常运行。

二、总结

        InputManagerService(IMS)在 Android 系统中的启动流程,涉及到从系统服务的初始化到具体的输入事件读取与处理线程的启动,覆盖了从 Java 层到 Native 层的多个步骤。

  • 系统级服务启动:InputManagerService 是由 SystemServer 启动的核心系统服务之一,负责管理所有输入设备和事件。
  • Java层与Native层协作:InputManagerService 通过 JNI 与本地层的 InputManager 交互,后者整合了 EventHub、InputReader 和 InputDispatcher,实现了从硬件事件读取到应用分发的全流程。
  • 多线程处理:InputReader 创建了一个单独的线程来异步处理输入事件,保证了系统的响应性和效率。
  • 动态配置调整:通过监听系统设置变化和用户切换事件,InputManagerService 能够实时调整其行为,提供更灵活和个性化的用户体验。

        根据以上的初始化过程总结整个层次关系:

        从这个初始化过程来看,InputManagerService 的逻辑基本上都是通过 jni 实现在 native 层。

http://www.dtcms.com/wzjs/21404.html

相关文章:

  • 企业做网站优势百度在西安的公司叫什么
  • 微网站案例3000块钱在朋友圈投放广告
  • 网站建设企业推荐360推广登录平台
  • 做网站的电话sem是什么专业
  • 云南省网站建设收费调查报告论文seo顾问什么职位
  • 佛山网站设计怎么做最近一周的时政热点新闻
  • 网站优化总结报告找客户资源的软件免费的
  • 企业解决方案架构三台网站seo
  • 网站建设企业资质宁波抖音seo搜索优化软件
  • wordpress做网站容易吗金华seo扣费
  • wordpress 当前文章分类id沈阳百度seo关键词排名优化软件
  • 直接采用模板网站有什么缺点品牌公关公司
  • 网店设计美工培训南京seo收费
  • 游戏网站建站网络营销分析报告
  • 网站做直播功能需要注册吗最新国内新闻50条简短
  • 有关毕业设计的网站竞价托管收费标准
  • xp 做网站服务器百度竞价推广常用到的工具
  • 不限空间的免费网站aso优化渠道
  • 网站服务器怎么做网站页面设计
  • 做网站 当站长公司网站搭建
  • 怎么看网站后台网页尺寸开个网站平台要多少钱
  • 网站怎么做移动端适配合肥百度推广优化
  • 怀化举报网站企业营销策划书模板
  • 茶叶企业网站开发源码百度竞价关键词价格查询工具
  • 平台网站seo公司厦门
  • 常用的网站开发外贸全网营销推广
  • 网站防止挂马应该怎么做浏阳廖主任打人案
  • 宿州网站建设报价10种营销方法
  • 江西南昌电子商务网站建设公司微博推广平台
  • 网站开发的意义灰色行业关键词推广