У меня есть MediaPlayer, работающий в службе. Служба отправляет трансляцию активности с текущей продолжительностью песни каждые 250 мс для обновления SeekBar в действии.BroadcastReceiver делает анимацию лаг
seekIntent = new Intent("com.someaction");
private Runnable sendUpdateToUI = new Runnable() {
public void run()
{
LogMediaPosition();
handler.postDelayed(this, 250);
}
};
private void LogMediaPosition()
{
mediaPosition = mMediaPlayer.getCurrentPosition();
mediaMax = mMediaPlayer.getDuration();
seekIntent.putExtra("counter", mediaPosition);
seekIntent.putExtra("mediamax", mediaMax);
sendBroadcast(seekIntent);
}
и в деятельности
registerReceiver(broadcastReceiver, new IntentFilter("com.someaction"));
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
updateUI(intent);
}
};
private void updateUI(Intent intent)
{
int seekProgress = intent.getIntExtra("counter", 0);
int seekMax = intent.getIntExtra("mediamax", 0);
songCurrentDurationLabel.setText(utils.millisecondsToTimer(seekProgress));
songProgressBar.setMax(seekMax);
songProgressBar.setProgress(seekProgress);
}
Активность также имеет простой TranslateAnimation.
TranslateAnimation translate = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0);
translate.setDuration(500);
translate.setFillAfter(true);
translate.setFillEnabled(true);
btnName.startAnimation(translate);
Когда регистратор зарегистрирован, в TranslateAnimation есть очень небольшое, но заметное отставание. Но если я прокомментирую строку registerReceiver() в действии, то есть не позволяя приемнику регистрироваться, не обновляя SeekBar, TranslateAnimation работает отлично.
Любое предложение, как это можно решить, чтобы получить плавную анимацию даже после регистрации получателя?
Я также добавил код для TranslateAnimation к вопросу. Если бы вы могли сказать, посмотрев код, как я могу его улучшить? –