【发布时间】:2015-11-11 19:44:01
【问题描述】:
以下代码更新 TextView 直到某个条件评估为 false,然后 Handler postDelayed 不会被进一步调用。
但是,如果 Activity 被销毁,它会尝试更新一个 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 可以在任何执行点尝试访问已销毁活动的数据成员,如何防止这种情况发生?
【问题讨论】:
标签: java android multithreading runnable android-handler