1. ホーム
  2. Android

60フレーム飛ばした!?アプリケーションがメインスレッドで過剰な作業を行っている可能性があります。

2022-02-16 23:03:14
最近、アプリのインターフェイスが飛び跳ねると非常に動かなくなることを発見しました。それは非常に明白で、以下のように出力されるログをご覧ください。

The application may be doing too much work on its main thread

これは、スキップされた60フレームがメインスレッドでより時間のかかる処理をしているかもしれないが、アプリケーションがANRに達するほどではない、というシンプルでわかりやすいヒントです。
これは厄介な、明らかにすでにああの最適化、本当に困惑している。理由は、アクティビティ内のコードの初期化ではなく、インターフェイスのレイアウトは、間違いなく我々はすべてのインターフェイスの写真や大きな画像をたくさん使用して、インターフェイスが描画するために長い時間がかかるようになります。

//imagview for example references a large image
<ImageView
    android:id="@+id/iv_play_dist"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:layout_centerInParent="true"
     />

問題が見つかったので、解決方法は簡単で、以下に1つを示します。

playDistImageView= (ImageView) findViewById(R.id.iv_play_dist);
Glide.with(this).load(R.drawable.play_disc).into(playDistImageView);

アイデアは簡単で、この画像をレイアウトファイルに直接設定する代わりに、設定するコードに入れ、さらに最適化のために画像読み込みフレームワークも使用するのです。
これが終わったら、もう一度アプリを開いてみてください。ジャンプしたときのインターフェイスがいかにスムーズか、おわかりいただけると思います。