所以活动开始,我创建一个Thread来检查何时进入下一个活动。但有时我需要这种活动才能自杀。 onPause执行此操作,但在此之后线程仍处于活动状态,并且在时间用完之后它将启动一个新活动。是否有可能杀死此线程并停止goToFinals意图?
public class Questions extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String in = getIntent().getStringExtra("time");
long tmp = Long.parseLong(in);
endTime = (long) System.currentTimeMillis() + tmp;
Thread progress = new Thread(new Runnable() {
public void run() {
while(endTime > System.currentTimeMillis()) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Intent goToFinals = new Intent(Questions.this,End.class);
startActivity(goToFinals);
}
});
progress.start();
}
@Override
protected void onPause() {
super.onPause();
finish();
}
}
答案 0 :(得分:2)
有几种方法可以阻止你的线程。如果您存储了Thread
对象,则可以在其上调用interrupt()
:
progress.interrupt();
这会导致sleep()
抛出你应该返回的InterruptedException
,而不仅仅是打印堆栈跟踪。您还应该执行以下循环:
while(endTime > System.currentTimeMillis()
&& !Thread.currentThread().isInterrupted()) {
您还可以设置某种关闭标志:
// it must be volatile if used in multiple threads
private volatile boolean shutdown;
// in your thread loop you do:
while (!shutdown && endTime > System.currentTimeMillis()) {
...
}
// when you want the thread to stop:
shutdown = true;
答案 1 :(得分:0)
为了安全地退出线程,你必须首先调用thread_instance.interrupt(),然后你可以检查它是否被中断。 请参阅此LINK
答案 2 :(得分:0)
请参阅this帖子了解kill java thread。他们推荐的方法是使用共享变量作为标志,要求后台线程停止。然后,该变量可以由请求线程终止的不同对象设置。