如何从按钮重启java / Android中的线程?

时间:2010-09-29 22:37:16

标签: java android multithreading

我在java / Android中有一个这样的线程:

Handler handler = new Handler() {

    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        update_i();
    }
};



@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();

    Thread myThread = new Thread(new Runnable() {
        public void run() {
            while (true) {
                try {
                    handler.sendMessage(handler.obtainMessage());
                    Thread.sleep(timer);
                } catch (Throwable t) {
                }
            }
        }
    });

    myThread.start();
}

当我运行我的应用程序时,该线程正常工作。但我想用一个按钮启动/重启线程。

Button.OnClickListener StartButtonOnClickListener = new Button.OnClickListener() {
    @Override
    public void onClick(View v) {

        //start/restart the thread
    }
};

如果我将线程复制到按钮中,我每次用户点击按钮时都会创建一个新线程。我希望在用户第一次单击按钮时运行该线程,“kill it”并从头开始,如果用户第二次单击该按钮(我不想启动第二个线程)。

2 个答案:

答案 0 :(得分:12)

我认为Colin是wright你不能重新启动你需要创建一个新实例,如果中断函数仍在运行,则中断函数将停止正在运行的线程。

我建议你创建一个内联类,内联实现的instand,它会使它更容易理解。

if(myThread.isAlive()){
    myThread.interrupt(); 
}
myThread = new MyThread();
myThread.start();

希望这会有所帮助

答案 1 :(得分:5)

您无法重新启动线程。

来自文档:

Throws IllegalThreadStateException  
    if the Thread has been started before

你可以杀死以前的线程,但最后你必须创建你的线程的第二个实例。


资源: