私の勘が正しいと判断したと思います。
たとえば、いくつかの簡単なテストを実行しました。
long start = SystemClock.uptimeMillis();
Log.d("blah", "start");
while (SystemClock.uptimeMillis() < start + 10000)
{
// do some work-intensive stuff here
}
Log.d("blah", "finish");
...その間の10秒間に何をしたかに関係なく(コードループ内で、および/または意図的にコンピューターを使用して他のことを実行してCPUをロードしました)、スレッドは常に開始後正確に10秒を報告します(+ 10ミリ秒、オーバーヘッドLogCat タイムスタンプとストップウォッチの両方から判断すると、ロードされたホスト CPU は、予想されるように、エミュレーターの時間の感覚をまったく拡張しないと私は言います。
この動作を変更するには、オプションを QEMU レイヤーに渡したいと考えています。
$ emulator -avd my_avd -qemu -clock vm
しかし、これは実際には、VM の起動時に時刻を設定することに関係している可能性があります (QEMU は、currentTimeMillis()、uptimeMillis()、および nanoTime() の結果の管理とは無関係に行っているようです)。わかりません (QEMU のドキュメントはかなり粗いです。) とにかく、Android QEMU には「vm」クロックがないように見えるため、上記は機能しません。ノート:
$ emulator -avd my_avd -qemu -clock ?
Available alarm timers, in order of precedence:
unix
しかし、少なくとも、私の小さな理論が正しいと疑うのに十分な証拠を集めました. :-) エミュレートされたアプリが実際のクロックへのリンクなしでオーディオを再生したり、UI トランジション効果などを実行したりする方法がわからないので、それは理にかなっています。ただし、クロックをエミュレートするオプションがあると便利です。