Когда этот звук воспроизведения называется
mSoundManager.playSound(1);
Android ожидает завершения этого вызова, затем вы набираете
mHandler.postAtTime(this, SystemClock.uptimeMillis() + 200);
, однако, если вы отмените эти вызовы, вы можете обнаружить, чтовремя более точное.
mHandler.postAtTime(this, SystemClock.uptimeMillis() + 200);
mSoundManager.playSound(1);
Вы не можете рассчитывать на то, что ваш звук занимает ровно столько же времени для воспроизведения, поэтому советовать обработчику публиковать сообщение первым лучше.Однако все еще не идеален.
Другое соображение заключается в том, что вы пересчитываете время безотказной работы и добавляете к этому еще немного времени (в нашем случае 200).Почему бы не использовать оператор модуля в вашем рабочем времени, чтобы гарантировать, что ваше следующее запрошенное время поста будет более точно запланировано?
long divisions = SystemClock.uptimeMillis() % 200; // precisely scheduled event timings since system boot.
long nextDivision = divisions + 1; // the next desired event timing
mHandler.postAtTime(this, nextDivision * 200); // scaled back up to number of milli seconds
// now do more heavy lifting that would otherwise have affected uptimeMillis call
mSoundManager.playSound(1);