如何杀死在新活动中运行的线程

时间:2012-04-24 16:56:16

标签: android multithreading

所以活动开始,我创建一个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();
    }
}

3 个答案:

答案 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。他们推荐的方法是使用共享变量作为标志,要求后台线程停止。然后,该变量可以由请求线程终止的不同对象设置。