这里我有一个名为 Method1() 的方法,该方法将在奇数时间调用该方法时启动一个线程,并在偶数时间停止该方法。当我通过 Button.onClick 事件调用该方法时,下面的代码 fragment 有效。这是暂停和恢复线程的正确方法吗?我的方法线程安全吗?
Thread sampleThread = null;
..
..
..
private void Method1(){
if(sampleThread == null){
sampleThread = new Thread(){
@Override
public void run() {
while(true) {
Log.d(TAG,"Inside Thread");
}
}
};
sampleThread.start();
}else {
sampleThread.interrupt();
}
}
最佳答案
如果Method1
会被频繁调用,我建议你最好设置一个标志,启用它恢复线程,禁用它暂停线程。因为如果你频繁创建和销毁线程,许多 CPU 和内存将被浪费。您可以这样使用:
public class MyThread extends Thread{
volatile boolean isRunning = true;//make sure use volatile keyword
@Override
public void run() {
while(isRunning) {
Log.d(TAG,"Inside Thread");
}
}
public void setRunning(boolean running){
this.isRunning = running;
}
};
当你想暂停时,调用thread.setRunning(false)
,重启它,调用thread.setRunning(true)
如果不是那么频繁,你的解决方案几乎没问题,但我认为你应该添加
sampleThread = null
在 sampleThread.interrupt();
之后,否则当你下次暂停它时,它会中断一个非 Activity 线程,可能会抛出异常。
关于java - 在android中重复启动和停止一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34632709/