これはより詳細な説明です:
Choreographerを使用すると、アプリをvsyncに接続し、適切なタイミングでパフォーマンスを改善できます。
Androidビューアニメーションは、同じ目的でChoreographerを内部的に使用しています。アニメーションを適切にタイミング調整し、パフォーマンスを向上させるためです。
Choreographerはすべてのvsyncイベントについて通知されるため、Choreographer.post * APIによって渡されたRunnableの1つが1フレームの時間内に完了せず、フレームがスキップされるかどうかを知ることができます。
私の理解では、振付師はフレームのスキップのみを検出できます。これがなぜ起こるかを伝える方法はありません。
「アプリケーションがメインスレッドで実行している作業が多すぎる可能性があります。」というメッセージ 誤解を招く可能性があります。
出典:
LogcatにおけるChoreographerメッセージの意味
なぜ心配する必要があるのか
このメッセージがAndroidエミュレーターでポップアップし、スキップされたフレームの数がかなり少ない(<100)場合、エミュレーターが低速であることに安全に賭けることができます。これはほとんど常に発生します。しかし、スキップされたフレームの数が多く、300以上のオーダーの場合、コードに深刻な問題が発生する可能性があります。Androidデバイスは、iOSやWindowsデバイスとは異なり、さまざまなハードウェアで提供されます。RAMとCPUはさまざまで、すべてのデバイスで妥当なパフォーマンスとユーザーエクスペリエンスが必要な場合は、この問題を修正する必要があります。フレームがスキップされると、UIは遅く、遅延します。これは、望ましいユーザーエクスペリエンスではありません。
それを修正する方法
これを修正するには、長時間の処理が発生する、または発生する可能性のあるノードを特定する必要があります。最良の方法は、メインUIスレッドとは別のスレッドでどんなに小さくても大きくてもすべての処理を実行することです。したがって、SQLiteデータベースからデータにアクセスしたり、ハードコア計算を行ったり、単純に配列を並べ替えたりすることができます。別のスレッドで実行してください。
ここで問題があります。これらの操作を行うための新しいスレッドを作成し、アプリケーションを実行すると、「ビュー階層を作成した元のスレッドのみがそのビューにアクセスできる」と言ってクラッシュします。AndroidのUIはメインスレッドまたはUIスレッドによってのみ変更できるというこの事実を知る必要があります。そうしようとする他のスレッドは失敗し、このエラーでクラッシュします。実行する必要があるのは、runOnUiThread内に新しいRunnableを作成することです。このrunnable内で、UIに関連するすべての操作を実行する必要があります。ここで例を見つけます。
それで、メインのスレッドからデータを処理するためのThreadとRunnableがあります。AndroidにはAsyncTaskがあり、UIスレッドで長時間のプロセスを実行できます。これは、アプリケーションがデータ駆動型またはWeb API駆動型である場合、またはCanvasを使用して構築されるような複雑なUIを使用する場合に最も役立ちます。AsyncTaskの威力は、バックグラウンドで処理を実行できることです。処理が完了すると、遅れて影響を与えることなく、UIで必要なアクションを実行できます。AsyncTaskはアクティビティのUIスレッドから派生しているため、これが可能です。AsyncTaskを介してUIで行うすべての操作は、メインUIスレッドとは別のスレッドであり、ユーザーの操作に支障はありません。
だから、これはあなたがスムーズなアンドロイドアプリケーションを作るためにあなたが知る必要があることであり、私が知る限り、すべての初心者が彼のコンソールでこのメッセージを受け取ることを知っています。