Следующий код обновляет TextView до тех пор, пока определенное условие не станет ложным, а затем Handler postDelayed больше не вызывается.
Однако, если действие уничтожено, оно попытается обновить значение null TextView. Как правильно с этим справиться? Я знаю, что могу поставить защитную нулевую проверку на TextView, но это все еще не является по-настоящему безопасным потоком.
@Override
protected void onCreate(Bundle savedInstanceState) {
Handler durationHandler = new Handler();
durationHandler.postDelayed(updateSeekBarTime, 50);
}
private Runnable updateSeekBarTime = new Runnable() {
public void run() {
timeElapsed = mediaPlayer.getCurrentPosition();
double timeRemaining = finalTime - timeElapsed;
timeLeft.setText(String.format("%d", TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining)));
if (timeRemaining >= 1000)
durationHandler.postDelayed(this, 200);
}
};
Другими словами, updateSeekBarTime может в любой момент выполнения попытаться получить доступ к элементам данных уже уничтоженного действия, как предотвратить это?