gpt4 book ai didi

java - 更新 Runnable 中的 TextView 会导致 Activity 停止

转载 作者:行者123 更新时间:2023-12-01 13:09:39 25 4
gpt4 key购买 nike

我有一个媒体播放器服务,其中有一个 Runnable,它每 100 毫秒更新一次搜索栏和当前位置 TextView

private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
long totalDuration = mediaPlayer.getDuration();
long currentDuration = mediaPlayer.getCurrentPosition();

seekBar.setProgress(progress);
nowduration.setText("" + utils.milliSecondsToTimer(currentDuration));
totalduration.setText(""+utils.milliSecondsToTimer(totalDuration));

// Running this thread after 100 milliseconds
mHandler.postDelayed(this, 100);
}
};

问题是,在一段时间(5-10 秒)后 Activity 停止了,我在 logcat 中看到的唯一错误就是这个。虽然删除 nowduration.setText 一切正常,但搜索栏正在更新,没有任何问题,为什么 TextView Activity 停止?

04-10 10:22:40.610      288-813/system_process I/ActivityManager﹕ Process com.package.appname (pid 3734) has died.
04-10 10:22:40.610 288-3633/system_process I/WindowManager﹕ WIN DEATH: Window{424b5708 com.package.appname/com.package.appname.MainActivity paused=false}

我尝试过的:1.在TextView.setText上使用runOnUithread - 相同的行为2.使用线程而不是处理程序 - 但我在停止线程时遇到问题,有时我需要调用Handler.removeCallBacks ,但据我所知,停止线程是一个非常糟糕的操作,这就是 Thread.stop( 被贬值) 的原因。

最佳答案

用户界面只能由 UI 线程更新。您需要一个处理程序来发布到 UI 线程:

private void startTimerThread() {
Handler handler = new Handler();
Runnable runnable = new Runnable() {
private long startTime = System.currentTimeMillis();
public void run() {

try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable(){
public void run() {
long totalDuration = mediaPlayer.getDuration();
long currentDuration = mediaPlayer.getCurrentPosition();

seekBar.setProgress(progress);
nowduration.setText("" + utils.milliSecondsToTimer(currentDuration));
totalduration.setText(""+utils.milliSecondsToTimer(totalDuration));


}
});
}

};
new Thread(runnable).start();
}

关于java - 更新 Runnable 中的 TextView 会导致 Activity 停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com