我在Android上的辅助活动中创建了一个线程,如下所示:
new Thread(new Runnable() {
public void run() {
try {
String branch=spinner.getSelectedItem().toString();
while( branch.equals(spinner.getSelectedItem().toString())){
System.out.println("----LOOPER."+spinner.getSelectedItem().toString());
GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString());
Thread.sleep(refreshRate);
}
} catch (InterruptedException e){
e.printStackTrace();
}
return;
}
}).start();
问题是,当我回到主要活动时,这个线程仍然在运行。
我做的是在goback按钮上写这个:
spinner.setSelection(0);
this.finish();
这样微调器的值就会改变,导致线程上的while循环返回false,从而退出线程。 但我不认为这是正确的做法。任何人都可以建议一些不同的,或者我应该说,更好的
答案 0 :(得分:1)
离开活动时应该使用线程的interrupt()方法。
YourThread.interrupt();
new Thread(new Runnable() {
public void run() {
try {
if(!Thread.interrupted())
String branch=spinner.getSelectedItem().toString();
while( branch.equals(spinner.getSelectedItem().toString())){
System.out.println("----LOOPER."+spinner.getSelectedItem().toString());
GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString());
Thread.sleep(refreshRate);
}
} catch (InterruptedException e){
e.printStackTrace();
}
return;
}
}).start();
答案 1 :(得分:0)
没有明确可用于停止线程的方法。之前有一些方法可以阻止线程但是它们已被弃用。请阅读以下链接,了解java开发人员为何需要这样:http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
根据这份文件,他们希望您按照建议的方式进行。所以你没错。
答案 2 :(得分:0)
private volatile boolean stopThread;
public void run() {
String branch=spinner.getSelectedItem().toString();
while (!stopThread) {
System.out.println("----LOOPER."+spinner.getSelectedItem().toString());
GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString());
Thread.sleep(refreshRate);
}
}
public void stopThread() {
stopThread = true;
thread.interrupt();
}