0

私たちは、リアルタイムに依存する分散システムデータベースの同期に取り組んでいます。

デバイスの時刻はユーザーまたは障害のあるネットワークによって変更される可能性があるため、データベース全体が非常に簡単に破損する可能性があります。そこで、マスターサーバーから時刻を取得して保存し、クロックティック数をカウントして経過した時間間隔を計算することでリアルタイムを計算することにしました。ハードウェアのクロックティックにアクセスするにはどうすればよいですか。そして、これのためにいくつかのサービスを実行する必要がありますか?デバイスがスタンバイ/スリープ/スイッチオフのときでも、ティックをカウントする必要があります。表示される実際の時計のように。マスターサーバーだけが時刻を設定できるようにするために、一種の並列クロックにしたいのです。

4

1 に答える 1

3

ハードウェアのクロックティックにアクセスするにはどうすればよいですか。

あなたはそうしない。

デバイスがスタンバイ/スリープ/スイッチオフのときでも、ティックをカウントする必要があります。

あなたのユーザーはそうしません。ユーザーは、CPUの電源を入れたままRAMを接続するソフトウェアを使用するのではなく、デバイスが正常に動作することを望んでいます。これは、バッテリーをかなり早く消耗させるためです。

近くの「遠隔地や村」では状況が違うのかもしれません。宇宙の既知の部分のほとんどでは、アプリが実行されていなくても時間が経過します。

したがって、時間が経過したかどうかを判断するために「ティックをカウント」する必要はありません。代わりに、「マスターサーバーから時刻を取得」して「保存」すると、電話が最後に再起動されてからのミリ秒数である現在の値も保存されます。次に、「マスターサーバー」からの相対時間を決定する必要がある場合は、保存されている値と現在の値SystemClock.elapsedRealtime()の差を計算し、そのミリ秒数を「マスターサーバーからの時間」に加算して現在の時間を取得します。 「マスターサーバー」から見た場合。elapsedRealtime()elapsedRealtime()

于 2013-03-25T12:08:21.397 に答える