【问题标题】:How to kill a thread running in a new activity如何杀死在新活动中运行的线程
【发布时间】:2012-04-24 16:56:16
【问题描述】:

所以活动开始了,我创建了一个线程来检查何时进入下一个活动。但有时我需要这种活动来杀死自己。 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();
    }
}

【问题讨论】:

    标签: android multithreading


    【解决方案1】:

    有几种方法可以停止线程。如果您存储您的 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;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多