Android デバイスの画面を回転させるのにかかる時間を測定するために .apk を作成しようとしています (いくつかの回転をループします)。
の呼び出しを使用して、4 つの位置 ( 、、および)setRequestedOrientation()で画面の向きを変更しています。PORTRAITLANDSCAPEREVERSE_PORTRAITREVERSE_LANDSCAPE
私の問題は、ローテーションがいつ終了したかがわからないことです。いくつかの解決策を試しましたが、それぞれに問題があります。
- 使ってみました
onConfigurationChanged()。問題は、向きの変化が からではなくセンサーから発生したときに、このメソッドがトリガーされることsetRequestedOrientation()です。への前回の呼び出しの後に機能させるには、実際にはパラメーターを使用して呼び出す必要setRequestedOrientation()がありFULL_SENSORます。onConfigurationChangedsetRequestedOrientation() setRequestedOrientation()画面の向き (度単位) を確認する while ループを追加して、一種の「ブロッキング」を試みました。android.view.Display.getRotation()以前に呼び出しsetRequestedOrientation()て、変更されるまで while ループでブロックしました。残念ながら、それも機能しません。UI が再表示される前に戻ります。onCreate()ローテーションが完了したと仮定して、再度呼び出されるのを待つことで、アクティビティのライフサイクルをたどろうとしました。以前は、各反復で を呼び出して、カウンターが値に達するまでループしていましたsetRequestedOrientation()。このシナリオでは、while ループが if ステートメントになり、onCreate毎回関数を呼び出すと仮定しますがonCreate()、数回の反復後に呼び出されません。UIも再描画されていないようです。- 私がオンラインで見つけた最終的な解決策 (ただし、完全には実装できていません) は、 の
waitForIdleSync()直後にメソッドを使用することsetRequestedOrientation()です。waitForIdleSync()は Instrumentation クラスの一部ですが、これはテスト用に作成されたものであり、標準の .apk 用ではないと思います。
どんなアイデアでも大歓迎です。よろしくお願いします。