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

Mar*_*tin 4 java multithreading android

我在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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

        //start/restart the thread
    }
};
Run Code Online (Sandbox Code Playgroud)

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

mkl*_*rha 13

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

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

if(myThread.isAlive()){
    myThread.interrupt(); 
}
myThread = new MyThread();
myThread.start();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Col*_*ert 5

您无法重新启动线程.

从文档:

Throws IllegalThreadStateException  
    if the Thread has been started before
Run Code Online (Sandbox Code Playgroud)

您可以终止前一个线程,但最后您必须创建线程的第二个实例.


资源: