Android完成线程

时间:2015-02-01 19:50:47

标签: java android multithreading

我想完成Thread。 ProgressBar进度为0,单击按钮时线程将关闭。我使用了destroy()stop()resume()interrupt(),但无效。我怎么能完成Thread?

 class TIME implements Runnable {
    @Override
    public void run() {

        for (int i=0; i<10; i++) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            handler.post(new Runnable() {
                @Override
                public void run() {
                    progressBar.setProgress(i);
                    if(i==9){Log.i("Log","Time's Up!");}
                }
            });
        }
    }
}
onCreate()中的

new Thread(new TIME()).start();
ProgressBar progressBar=(ProgressBar)findViewById(R.id.progressBar1);
progressBar.setMax(2000);
Button bt=(Button)findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
          //TIME thread will finish. And progressBar.setProgress(0);
        }
    });

3 个答案:

答案 0 :(得分:2)

如果你的意思是线程希望自己完成 - 只需退出其运行功能,系统就会将其清理干净。如果你的意思是想要从另一个线程中退出它 - 你不能直接这样做,因为它是一个非常不安全的操作,你永远不知道当时线程正在做什么,以及它是否可能导致资源泄漏或留下数据处于糟糕的状态。相反,你取消()线程,并且线程应该偶尔查看并查看isCanceled()是否为真,如果是,则退出其运行函数,如上所述。

答案 1 :(得分:2)

我为这样说道歉,但显示的编码技术感觉有点缺乏,而不是Android编码机制的精神。

根据您发布的代码判断,您应该查看AsyncTask文档或AsyncTask部分here。它拥有您需要的一切

答案 2 :(得分:1)

我想我知道你想要实现的目标 - 但正如其他人之前所说的那样,你的编码技术有点模糊且难以理解。我想你想要一个线程运行,并能够在某个时候停止线程。这通常以这种方式完成:

class TIME implements Runnable {
private volatile boolean isRunning = true;
    @Override
    public void run() {

       while (isRunning){
           // do some work here
       }
    }

    public void killMe(){
       isRunning=false;
    }
}
相关问题