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

通用企业网站模板网站页面设计网页说明

通用企业网站模板,网站页面设计网页说明,做图片带字的网站,好听的网络科技公司名字IMS分为Java层与Native层两个部分#xff0c;其启动过程是从Java部分的初始化开始#xff0c;进而完成Native部分的初始化。 □创建新的IMS对象。 □调用IMS对象的start#xff08;#xff09;函数完成启动 同其他系统服务一样#xff0c;IMS在SystemServer中的ServerT…IMS分为Java层与Native层两个部分其启动过程是从Java部分的初始化开始进而完成Native部分的初始化。 □创建新的IMS对象。 □调用IMS对象的start函数完成启动 同其他系统服务一样IMS在SystemServer中的ServerThread线程中启动。 private void startOtherServices(NonNull TimingsTraceAndSlog t) {t.traceBegin(startOtherServices); inputManager new InputManagerService(context);inputManager.setWindowManagerCallbacks(wm.getInputManagerCallback());inputManager.start(); 创建新的IMS对象 线程 mLooper  DisplayThread.get().getLooper() 构造NativeInputManagerService /** Point of injection for test dependencies. */VisibleForTestingstatic class Injector {private final Context mContext;private final Looper mLooper;Injector(Context context, Looper looper) {mContext context;mLooper looper;}Context getContext() {return mContext;}Looper getLooper() {return mLooper;}NativeInputManagerService getNativeService(InputManagerService service) {return new NativeInputManagerService.NativeImpl(service, mLooper.getQueue());}void registerLocalService(InputManagerInternal localService) {LocalServices.addService(InputManagerInternal.class, localService);}}public InputManagerService(Context context) {this(new Injector(context, DisplayThread.get().getLooper()));} class NativeImpl implements NativeInputManagerService {/** Pointer to native input manager service object, used by native code. */SuppressWarnings({unused, FieldCanBeLocal})private final long mPtr;NativeImpl(InputManagerService service, MessageQueue messageQueue) {mPtr init(service, messageQueue);}nativeInit函数创建了一个类型为NativeInputManager的对象它是Java层与Native层互相通信的桥梁。 com_android_server_input_InputManagerService.cpp static jlong nativeInit(JNIEnv* env, jclass /* clazz */, jobject serviceObj,jobject messageQueueObj) {spMessageQueue messageQueue android_os_MessageQueue_getMessageQueue(env, messageQueueObj);if (messageQueue nullptr) {jniThrowRuntimeException(env, MessageQueue is not initialized.);return 0;}static std::once_flag nativeInitialize;NativeInputManager* im nullptr;std::call_once(nativeInitialize, []() {// Create the NativeInputManager, which should not be destroyed or deallocated for the// lifetime of the process.im new NativeInputManager(serviceObj, messageQueue-getLooper());});LOG_ALWAYS_FATAL_IF(im nullptr, NativeInputManager was already initialized.);return reinterpret_castjlong(im); } 看下这个类的声明可以发现它实现了InputReaderPolicyInterface与InputDispatcher-PolicyInterface两个接口。这说明上一节曾经介绍过的两个重要的输入系统参与者InputReaderPolicy和InputDispatcherPolicy是由NativeInputManager实现的然而它仅仅为两个策略提供接口实现而已并不是策略的实际实现者。NativeInputManager通过JNI回调Java层的IMS由它完成决策。本节暂不讨论其实现细节读者只要先记住两个策略参与者的接口实现位于NativeInputManager即可。 4 class NativeInputManager : public virtual InputReaderPolicyInterface, 265 public virtual InputDispatcherPolicyInterface, 266 public virtual PointerControllerPolicyInterface { NativeInputManager构造如下 1、创建一个全局引用并通过mServiceObj指向上层的InputManagerService对象 2、创建并注册服务InputManager。 原来InputManager才是底层输入系统的服务而NativeInputManagerService通过mServiceObj保存了上层InputManagerService引用并且上层InputManagerService通过mPtr指向底层的NativeInputManager。因此我们可以判定NativeInputManagerService就是一个连接上层与底层的桥梁。 NativeInputManager::NativeInputManager(jobject serviceObj, const spLooper looper): mLooper(looper), mInteractive(true) {JNIEnv* env jniEnv();mServiceObj env-NewGlobalRef(serviceObj);InputManager* im new InputManager(this, *this);mInputManager im;defaultServiceManager()-addService(String16(inputflinger), im); } InputManager.cpp InputManager::InputManager(const spInputReaderPolicyInterface readerPolicy,InputDispatcherPolicyInterface dispatcherPolicy) {mDispatcher createInputDispatcher(dispatcherPolicy); 4、创建InputDispatcher对象使用InputReaderPolicyInterfacemProcessor std::make_uniqueInputProcessor(*mDispatcher);mBlocker std::make_uniqueUnwantedInteractionBlocker(*mProcessor);mReader createInputReader(readerPolicy, *mBlocker); 4、创建InputReader对象使用InputReaderPolicyInterface和InputListenerInterface } 可以看到InputManager主要做以下几件事 构造InputDispatcher对象用于后续事件分发处理构造InputReader对象用于事件输入监听调用InputDispatcher和InputReader的start()方法 InputManager构造函数所使用的两个接口分别由InputDispatcher和InputReader所使用。因此InputManager向上通信的能力是由子模块InputDispatcher和InputReader实现的。 InputManager创建了InputReader、InputDispatcher。 InputReader负责从EventHub中获取事件然后把事件加工后发送给InputClassifier。 最后InputDispatcher会对事件进行分发。 frameworks/native/services/inputflinger/dispatcher/InputDispatcherFactory.cppstd::unique_ptrInputDispatcherInterface createInputDispatcher(InputDispatcherPolicyInterface policy) {return std::make_uniqueandroid::inputdispatcher::InputDispatcher(policy); } std::unique_ptrInputReaderInterface createInputReader(const spInputReaderPolicyInterface policy, InputListenerInterface listener) {return std::make_uniqueInputReader(std::make_uniqueEventHub(), policy, listener); } 调用IMS对象的start函数完成启动 public void start() {Slog.i(TAG, Starting input manager);mNative.start(); } static void nativeStart(JNIEnv* env, jobject nativeImplObj) {NativeInputManager* im getNativeInputManager(env, nativeImplObj);status_t result im-getInputManager()-start();if (result) {jniThrowRuntimeException(env, Input manager could not be started.);} } status_t InputManager::start() {status_t result mDispatcher-start();if (result) {ALOGE(Could not start InputDispatcher thread due to error %d., result);return result;}result mReader-start();if (result) {ALOGE(Could not start InputReader due to error %d., result);mDispatcher-stop();return result;}return OK; } 启动mDispatcher和mReader status_t InputReader::start() {if (mThread) {return ALREADY_EXISTS;}mThread std::make_uniqueInputThread(InputReader, [this]() { loopOnce(); }, [this]() { mEventHub-wake(); });return OK; }status_t InputDispatcher::start() {if (mThread) {return ALREADY_EXISTS;}mThread std::make_uniqueInputThread(InputDispatcher, [this]() { dispatchOnce(); }, [this]() { mLooper-wake(); });return OK; }
http://www.zqtcl.cn/news/343511/

相关文章:

  • 网站域名解析失败个人推广网站
  • 东莞网站建设网络公司排名卓业网站建设
  • 建立自己的网站平台的好处高校英文网站建设
  • 大力推进网站集约化建设兰州优秀网站推广
  • 手机wap网站怎样从微信公众号打开辽宁省住房和城乡建设厅网站上不去
  • 网站建设备案 优帮云四川建设设计公司网站
  • dede网站搬家 空间转移的方法网站建设多少钱一个平台
  • 山东济南网站开发互联网创业项目哪家好平台
  • 公司网站建设文案济南网站定制策划
  • 怎么做网站例如京东小红书推广引流
  • 游戏网站建设策划书企业vi包含哪些内容
  • 教育视频网站开发网站响应时间长
  • 在哪些网站做收录比较快张家港江阴网站设计
  • 商业网站最佳域名贵州网站建设
  • 毕业设计做网站的步骤网络推广关键词优化公司
  • 悠悠我心的个人网站怎么做怎么开网站平台
  • 行业网站产品选择废旧材料手工制作大全
  • 企业内网网站建设徐州关键词优化公司
  • step7用法fc州网站建设discuz网站论坛间帖子转移
  • 网站的js效果代码大全wordpress主题修改颜色教程
  • 安徽省城乡和建设厅网站申请免费域名邮箱
  • 溧阳网站建设哪家好wordpress 迁移 空白
  • 网页设计个人网站设计建设营销型网站多少钱
  • 做网站时联系我们制作模板西部数据网站空间
  • 合肥网站建设服务公司wordpress安装字体
  • 建设阅读网站的意义长沙微推广平台
  • 所有搜索引擎蜘蛛不来网站了怎么开发手机页面
  • 网站没域名广告传媒公司取名
  • 代理浏览网站跨境电商平台
  • 触摸终端软件门户网站wordpress标签不解析