【问题标题】:InputDispatcher: Dropped event because input dispatch is disabledInputDispatcher:由于输入调度被禁用而丢弃的事件
【发布时间】:2012-08-02 09:36:52
【问题描述】:

我正在为android开发ui自动化平台。

由于某些原因,有时(非常罕见的)点击事件会被丢弃

当它发生时,我会在日志中看到

I/InputDispatcher( 2707): Dropped event because input dispatch is disabled.

请告知可以做些什么来启用输入调度。

提前谢谢你

【问题讨论】:

    标签: android ui-automation dispatch


    【解决方案1】:

    在某些情况下,Input Dispatcher 会丢弃输入事件:

    1. DROP_REASON_BLOCKED :如果当前应用程序没有响应并且用户正在点击设备,则输入事件将被丢弃
    2. DROP_REASON_STALE:由于事件过时而被丢弃
    3. DROP_REASON_APP_SWITCH:由于未决的过期应用切换而丢弃的事件
    4. DROP_REASON_DISABLED:由于输入调度被禁用而丢弃事件

    等等

    在您的情况下,它的执行情况 4。意味着某些事情变得可疑或您的第一个输入尚未执行。所以 Input Dispatcher 被禁用了。

    检查[中间件类InputDispatcher.cpp的方法dropInboundEventLocked@

    【讨论】:

      【解决方案2】:

      仅在屏幕关闭时发生。点击事件正在打开屏幕,但它比打开屏幕更快。

      现在,我正在检查屏幕是否关闭并打开

      //Acquire wake lock in case screen is off
      if (PermissionsUtil.checkSelfPermission(getContext(), Manifest.permission.WAKE_LOCK))
      {
          PowerManager pm = (PowerManager)getContext().getSystemService(Context.POWER_SERVICE);
          if (pm.isScreenOn() == false)
          {
              wakeLock = pm.newWakeLock((PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), TAG);
              // 
              wakeLock.acquire();
              Log.d(TAG,"Acquiring wake lock");
           }
      }
      
      //Do my stuff
      
      //Release wake lock in case it was acquire
      if (wakeLock != null && wakeLock.isHeld())
      {
          wakeLock.release();
          wakeLock = null;
          Log.d(TAG,"Releasing wake lock");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-29
        • 2019-07-27
        • 2016-04-08
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多