アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

Android Profiler, Fragment, EditText, 画面遷移で強制終了

まさかAndroid Profilerのせいだとは思いもしなかった。
Android Profilerのタブに触れたが最後、強制終了するapkが生成されるようになります。

環境

Android Studio 3.1.2 (3.1.1でも報告がある)
Android 8.0.0

    compileSdkVersion 27
    buildToolsVersion '27.0.3'

再現手順

  • Android Profilerを開きます。
  • ビルドしてデバッグ用apkでデプロイします
  • FragmentにEditTextがある状態で以下を行うと落ちます
fragmentManager.beginTransaction()  
fragmentManager.popBackStack()  

重要なのはAndroid Profilerを開いた後に行うことです。デプロイした後にAndroid Profilerを開いてもその時は問題ありません。次に生成したときが問題なのです。

回避方法

Android Studioを再起動しAndroid Profilerを起動しないようにしましょう。

原因考察

Android Profilerを開いた後に生成したapkのAndroid Profilerの画面です。
「あ」と入力しました。
f:id:matsudamper:20180530180455j:plain
こんな感じで入力された文字が反映されています。途中から開いた場合はこの表示はありません。なんでAndroid Profilerって思いましたがこんなことをやっているんですね。

エラー文

closeConnectionしようとしたけど既にFragmentが破棄されていてnullで落ちたって感じなんでしょうか。ここらへんは詳しくないのでなんとも言えません…
android.view.inputmethod.InputConnectionって文字入力を横取りしてたりするんですかね?
Android Profiler起動後に生成したapkって重いんですよね。文字入力のその処理が重いから(他にもそういう処理がある?)Android Profilerが起動してなければその処理を埋め込んでいないapkが生成されるのかなと思いました。

Fatal Exception: java.lang.NullPointerException
Attempt to invoke interface method 'void android.view.inputmethod.InputConnection.closeConnection()' on a null object reference

android.view.inputmethod.InputConnectionWrapper.closeConnection (InputConnectionWrapper.java:270)
com.android.internal.view.IInputConnectionWrapper.executeMessage (IInputConnectionWrapper.java:541)
com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage (IInputConnectionWrapper.java:85)
android.os.Handler.dispatchMessage (Handler.java:105)
android.os.Looper.loop (Looper.java:251)
android.app.ActivityThread.main (ActivityThread.java:6589)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)
........

おわりに

最近OSのバグも踏んだし今回開発に関するバグを踏んだしなんなんだと言いたい。