0

所以活动开始了,我创建了一个线程来检查何时进入下一个活动。但有时我需要这种活动来杀死自己。onPause 会这样做,但在那之后 Thread 仍然活着,并且在时间用完后它会开始一个新的活动。是否有可能杀死这个线程并停止 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();
    }
}
4

3 回答 3

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;
于 2012-04-24T16:58:50.773 回答
0

为了安全地退出线程,您必须首先调用 thread_instance.interrupt() 然后您可以检查它是否被中断。参考这个链接

于 2012-04-24T16:59:12.577 回答
0

看到这个帖子杀死java线程。他们推荐的方式是使用共享变量作为要求后台线程停止的标志。然后可以由请求线程终止的不同对象设置此变量。

于 2012-04-24T17:00:54.357 回答