osfans / trime

同文安卓輸入法平臺3.x/Android-rime/Rime Input Method Engine for Android
http://osfans.github.io/trime/
GNU General Public License v3.0
3.09k stars 372 forks source link

Crashs When Switching Keyboards #956

Closed sls1005 closed 1 year ago

sls1005 commented 1 year ago

Describe the bug It crashed when switching from Trime to another input method. (切换至其他键盘时出错。)

To Reproduce Steps to reproduce the bug:

  1. Switch to Trime.
  2. Switch to another input method/keyboard (e.g. Gboard).
  3. See bug.

Expected behavior No crash.

Log

I/InputMethodService( 6121): onDestroy
D/InputMethodService( 6121): notifyKeyboardClosed
D/AndroidRuntime( 6121): Shutting down VM
--------- beginning of crash
E/AndroidRuntime( 6121): FATAL EXCEPTION: main
E/AndroidRuntime( 6121): Process: com.osfans.trime, PID: 6121
E/AndroidRuntime( 6121): java.lang.RuntimeException: Unable to stop service com.osfans.trime.TrimeImeService@17818ca: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.osfans.trime.ime.keyboard.InputFeedbackManager.releaseSoundPool()' on a null object reference
E/AndroidRuntime( 6121):    at android.app.ActivityThread.handleStopService(ActivityThread.java:5280)
E/AndroidRuntime( 6121):    at android.app.ActivityThread.-$$Nest$mhandleStopService(Unknown Source:0)
E/AndroidRuntime( 6121):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2449)
E/AndroidRuntime( 6121):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime( 6121):    at android.os.Looper.loopOnce(Looper.java:226)
E/AndroidRuntime( 6121):    at android.os.Looper.loop(Looper.java:313)
E/AndroidRuntime( 6121):    at android.app.ActivityThread.main(ActivityThread.java:8741)
E/AndroidRuntime( 6121):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 6121):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
E/AndroidRuntime( 6121):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
E/AndroidRuntime( 6121): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.osfans.trime.ime.keyboard.InputFeedbackManager.releaseSoundPool()' on a null object reference
E/AndroidRuntime( 6121):    at com.osfans.trime.ime.core.Trime.onFinishInputView(Trime.java:872)
E/AndroidRuntime( 6121):    at android.inputmethodservice.InputMethodService.finishViews(InputMethodService.java:3168)
E/AndroidRuntime( 6121):    at android.inputmethodservice.InputMethodService.doFinishInput(InputMethodService.java:3262)
E/AndroidRuntime( 6121):    at android.inputmethodservice.InputMethodService.onDestroy(InputMethodService.java:1927)
E/AndroidRuntime( 6121):    at com.osfans.trime.ime.lifecycle.LifecycleInputMethodService.onDestroy(LifecycleInputMethodService.kt:41)
E/AndroidRuntime( 6121):    at com.osfans.trime.ime.core.Trime.onDestroy(Trime.java:603)
E/AndroidRuntime( 6121):    at android.app.ActivityThread.handleStopService(ActivityThread.java:5260)
E/AndroidRuntime( 6121):    ... 9 more
E/CustomActivityOnCrash( 6121): App has crashed, executing CustomActivityOnCrash's UncaughtExceptionHandler
E/CustomActivityOnCrash( 6121): java.lang.RuntimeException: Unable to stop service com.osfans.trime.TrimeImeService@17818ca: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.osfans.trime.ime.keyboard.InputFeedbackManager.releaseSoundPool()' on a null object reference
E/CustomActivityOnCrash( 6121):     at android.app.ActivityThread.handleStopService(ActivityThread.java:5280)
E/CustomActivityOnCrash( 6121):     at android.app.ActivityThread.-$$Nest$mhandleStopService(Unknown Source:0)
E/CustomActivityOnCrash( 6121):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2449)
E/CustomActivityOnCrash( 6121):     at android.os.Handler.dispatchMessage(Handler.java:106)
E/CustomActivityOnCrash( 6121):     at android.os.Looper.loopOnce(Looper.java:226)
E/CustomActivityOnCrash( 6121):     at android.os.Looper.loop(Looper.java:313)
E/CustomActivityOnCrash( 6121):     at android.app.ActivityThread.main(ActivityThread.java:8741)
E/CustomActivityOnCrash( 6121):     at java.lang.reflect.Method.invoke(Native Method)
E/CustomActivityOnCrash( 6121):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
E/CustomActivityOnCrash( 6121):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
E/CustomActivityOnCrash( 6121): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.osfans.trime.ime.keyboard.InputFeedbackManager.releaseSoundPool()' on a null object reference
E/CustomActivityOnCrash( 6121):     at com.osfans.trime.ime.core.Trime.onFinishInputView(Trime.java:872)
E/CustomActivityOnCrash( 6121):     at android.inputmethodservice.InputMethodService.finishViews(InputMethodService.java:3168)
E/CustomActivityOnCrash( 6121):     at android.inputmethodservice.InputMethodService.doFinishInput(InputMethodService.java:3262)
E/CustomActivityOnCrash( 6121):     at android.inputmethodservice.InputMethodService.onDestroy(InputMethodService.java:1927)
E/CustomActivityOnCrash( 6121):     at com.osfans.trime.ime.lifecycle.LifecycleInputMethodService.onDestroy(LifecycleInputMethodService.kt:41)
E/CustomActivityOnCrash( 6121):     at com.osfans.trime.ime.core.Trime.onDestroy(Trime.java:603)
E/CustomActivityOnCrash( 6121):     at android.app.ActivityThread.handleStopService(ActivityThread.java:5260)
E/CustomActivityOnCrash( 6121):     ... 9 more
E/CustomActivityOnCrash( 6121): Failed when resolving the restart activity class via getLaunchIntentForPackage, stack trace follows!
E/CustomActivityOnCrash( 6121): java.lang.ClassNotFoundException: com.osfans.trime.PrefLauncherAlias
E/CustomActivityOnCrash( 6121):     at java.lang.Class.classForName(Native Method)
E/CustomActivityOnCrash( 6121):     at java.lang.Class.forName(Class.java:454)
E/CustomActivityOnCrash( 6121):     at java.lang.Class.forName(Class.java:379)
E/CustomActivityOnCrash( 6121):     at cat.ereza.customactivityoncrash.CustomActivityOnCrash.getLauncherActivity(CustomActivityOnCrash.java:648)
E/CustomActivityOnCrash( 6121):     at cat.ereza.customactivityoncrash.CustomActivityOnCrash.guessRestartActivityClass(CustomActivityOnCrash.java:602)
E/CustomActivityOnCrash( 6121):     at cat.ereza.customactivityoncrash.CustomActivityOnCrash.lambda$install$0(CustomActivityOnCrash.java:177)
E/CustomActivityOnCrash( 6121):     at cat.ereza.customactivityoncrash.CustomActivityOnCrash$$ExternalSyntheticLambda0.uncaughtException(Unknown Source:2)
E/CustomActivityOnCrash( 6121):     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
E/CustomActivityOnCrash( 6121):     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
E/CustomActivityOnCrash( 6121):     at java.lang.Thread.dispatchUncaughtException(Thread.java:2306)
E/CustomActivityOnCrash( 6121): Caused by: java.lang.ClassNotFoundException: com.osfans.trime.PrefLauncherAlias
E/CustomActivityOnCrash( 6121):     ... 10 more
I/Process ( 6121): Sending signal. PID: 6121 SIG: 9

Smartphone (please complete the following information):

wxyzh commented 1 year ago

Maybe the soundpool is null when soundpoolrelease() https://github.com/osfans/trime/blob/b978f3a907134488fc716987cd41b5a701a014dd/app/src/main/java/com/osfans/trime/ime/core/Trime.java#L863C3-L878C4