gpt4 book ai didi

java - 如何正确中断android中的线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:02 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个按钮,当它被点击时,我启动一个新线程并更改按钮的文本。如果我再次按下该按钮,它将开始更快地更改其文本。

我想在第二次按下按钮时中断线程。正确的做法是什么?

public class TestActivity extends Activity {

Button btn;
int i = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
runThread();
}
});
}

private void runThread() {
new Thread() {
public void run() {
while (i++ < 1000) {
try {
runOnUiThread(new Runnable() {

@Override
public void run() {
btn.setText("#" + i);
}
});
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}

最佳答案

在这种情况下,只需保留对线程的引用并使用 Thread.interrupt():

private Thread runThread() {

return new Thread() {
public void run() {
while (i++ < 1000) {
try {
runOnUiThread(new Runnable() {

@Override
public void run() {
btn.setText("#" + i);
}
});
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

然后:

 btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (myThread != null) myThread.interrupt();
myThread = runThread();
myThread.start();
}
});

阅读这篇文章了解更多信息和选项:

How to properly stop the Thread in Java?

关于java - 如何正确中断android中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24654060/

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