I'm releasing 3rd party keyboard application on the Google Play Store.
I received some ANRs like below
Input dispatching timed out (e716b5 InputMethod (server) is not responding. Waited 10001ms for MotionEvent)
at sun.misc.Unsafe.park (Native method)
at java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:230)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos (AbstractQueuedSynchronizer.java:1063)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos (AbstractQueuedSynchronizer.java:1358)
at java.util.concurrent.CountDownLatch.await (CountDownLatch.java:278)
at com.android.internal.inputmethod.CancellationGroup$Completable$ValueBase.await (CancellationGroup.java:143)
at com.android.internal.inputmethod.CancellationGroup$Completable$Values.await (CancellationGroup.java:203)
at com.android.internal.view.InputConnectionWrapper.getResultOrNull (InputConnectionWrapper.java:100)
at com.android.internal.view.InputConnectionWrapper.getTextBeforeCursor (InputConnectionWrapper.java:137)
at func.keyboard.InputAnalyzer.onKeyChar (InputAnalyzer.java:25)
at ime.BaseIME.callAnalyzer (BaseIME.java:435)
at ime.LegacyIME.onKeyChar (LegacyIME.java:340)
at ime.BaseIME.onKey (BaseIME.java:213)
at manager.KeyInputManager.onKey (KeyInputManager.java:75)
at common.PointerTracker.detectAndSendKey (PointerTracker.java:544)
at common.PointerTracker.onUpEvent (PointerTracker.java:390)
at common.KeyboardBaseView.onUpEvent (KeyboardBaseView.java:2423)
at common.KeyboardBaseView.sendOnXEvent (KeyboardBaseView.java:2385)
at ui.keyboard.common.KeyboardBaseView.onTouchEvent (KeyboardBaseView.java:2369)
at android.view.View.dispatchTouchEvent (View.java:15199)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3920)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3594)
at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:915)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1957)
at android.app.Dialog.dispatchTouchEvent (Dialog.java:1162)
at android.inputmethodservice.SoftInputWindow.dispatchTouchEvent (SoftInputWindow.java:188)
at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:873)
at android.view.View.dispatchPointerEvent (View.java:15458)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:7457)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:7233)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6595)
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6652)
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6618)
at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:6786)
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6626)
at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:6843)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6599)
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6652)
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6618)
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6626)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6599)
at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:9880)
at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:9718)
at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:9671)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:10014)
at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:220)
at android.os.MessageQueue.nativePollOnce (Native method)
at android.os.MessageQueue.next (MessageQueue.java:335)
at android.os.Looper.loop (Looper.java:206)
at android.app.ActivityThread.main (ActivityThread.java:8653)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
class InputAnalyzer {
...
fun onKeyChar(ic: InputConnection) {
this.ic = ic
if (!enabled)
return
val inputText = ic.getTextBeforeCursor(16, 0) ?: return
service.themeManager.animateFromText(inputText.toString())
}
}
When a user send key up event, my keyboard app send a character to EditText and get the text before cursor for word suggestion. And I don't know why this function takes too long time and how to prevent this situation...