我正在开发音乐播放器应用程序。
我正在线程内更新一个名为“ songPosition”的全局变量。问题在于,每当切换歌曲时,它都会创建一个新线程,但是旧线程仍在后台运行,并且还会增加全局变量。这导致变量增加得比我想要的快。
是否有一种方法可以停止旧线程的运行,以使该问题不再持续?
代码:
private int songPosition;
new Thread(){
public void run(){
songPosition = 0;
while (songPosition < songDuration){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// here is the variable being incremented
songPosition++;
runOnUiThread(new Runnable() {
@Override
public void run() {
seekBar.setProgress(songPosition); //This requires the variable to be final which is why I have a global variable
songPositionTextView.setText(String.valueOf(songPosition));
}
});
}
}
}.start();
答案 0 :(得分:0)
歌曲位置在当前线程的上下文中是局部的。您可以在此处使用ThreadLocal变量。
您还可以使用期货使用可取消任务。
答案 1 :(得分:0)
如果要在多个线程之间共享变量,请回答您的问题,然后用“ volatile”声明,以便所有这些线程将直接从其内存中读取该变量的最新数据。
首先,您必须将新创建的线程实例添加到列表中(如果要处理更多的线程),以便稍后可以轻松中断所有正在运行的线程。如果要杀死特定线程,请使用ConcurrentMap