デバッグ時のAndroid エミュレーターがとても遅くなった件
Android Studioの3.3.2を入れたところ、Androidエミュレーターが激遅状態になってしまいました。ただでさえ遅いのに、描画が何十秒も待たされるのでは使い物になりません。
その解決の課程を記事にしました。腑に落ちない解決なのですが、同様の現象が出た時の参考になればさいわいです。(個人的な忘備録として残します)
1.HAXMを確認する
定番の高速対応であるHAXMを確認します。SDK ManagerでSDKのアップデートを確認して、次にWindowsでの動作状況を確認します。
動作はちゃんとしているようです。
2.デバッガを使わないで操作してみる
エミュレータの操作はデバッガを通して行っていたので、デバッガを動かさないで操作すると、今度は問題なく動作します。よって、原因はデバッガにあるようです。
また実機でもデバッガを有効にして動作させると、超遅くなりました。デバッガを動作させると、動作が重くなるようです。
3.デバッガ環境を変えてみる
デバッガ環境に問題がありそうなので、デバッガの環境を変えてみます。「run」「Debug」を選んで「Edit Config…」を選びます。ダイアログが開くので「Debugger」のタブを選択します。
また、監視をしたとしても
デバッグタイプを「Java」にします。これで早くなる場合があるようですが、全然効果がありませんでした。
4.build.gradleの修正
ここで、プロジェクトを「さっぽろ周辺マップ」から「東京周辺マップ」へ変更してみました。すると、東京周辺マップでは、描画が遅い現象が発生しませんでした。描画方法が異なる両プロジェクトですが、これはbuld.grandleで記述する各バージョンによって違いが出ているかもしれません。
さっぽろ周辺マップで使っているバージョンを東京周辺マップと同一にします。警告が出ていましたが、それも解消させました。
結論はだめでした。
5.エミュレーターが起動しなくなる
いじっている内に、ついにエミュレータが起動しない現象が発生。
0:41:40: Executing task…
10:41:40: Task execution finished.
AVDマネージャーからはエミュレーターは起動できるのですが、runメニューからは、処理がすぐ終わります。何か間違って項目を設定したのかもしれませんが、いろいろやっても全然だめです。他のプロジェクトは動くので、さっぽろ周辺マップのプロジェクトのみで発生します。
バックアップしてあった旧プロジェクトを戻します。動くようになりましたが、ソースの同期に時間がまた掛かりました。
6.オーバーヘッドの監視に時間が掛かっている
復旧した後で動かしているうちに、Android Studioの右下のウインドウにあるオーバーヘッドに目が留まりました。
非公開の英語モードで使うGetEnglishTextArray関数で、めちゃくちゃ時間が掛かっています。ここの監視のチェックを外すと、動作が軽くなりました。何で使っていない英語モードの関数のオーバーヘッドの監視をしているのでしょうか。また、監視をしたとしても処理は通らないはずなのに、何か処理をしているのでしょうか。
GetEnglishTextArray関数は変数を返すだけの関数なので、ダミーの1行を入れてブレイクポイントを設定して、再度起動してみます。
GetEnglishTextArray関数の監視はなくなり、いつも通りの速度で動作するようになりました。何でGetEnglishTextArray関数が監視されるようになったのか分かりませんが、とりあえず復旧しました。
7.結論
納得がいかない部分もありますが、動作するようになりました。まだ潜在的なバグがあるのかもしれませんが、経過を見ていこうと思います。
しかし、Android Studioの機能をもっと良く知らないと、開発は難しいということですね。私と違ってAndroidアプリの開発を仕事としている人ならば、メニューの中の各機能を理解する必要がありそうです。