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