Android 一段时间后停止线程

Android 一段时间后停止线程,android,Android,我正在编写一个游戏,在该游戏中,一个线程在指定的时间段后必须停止。用户未能完成特定级别。我正在使用一个线程。如何在指定的时间段后停止该线程并显示另一个视图。我如何做到这一点。以下代码将线程的启动延迟了一个时间限制 Thread t = ... t.join(timelimit); if (t.isAlive) t.interrupt(); 如何运行线程并在一段时间后关闭它。您可以使用以下代码在给定的指定时间后运行 Handler handler = new Handler();

我正在编写一个游戏,在该游戏中,一个线程在指定的时间段后必须停止。用户未能完成特定级别。我正在使用一个线程。如何在指定的时间段后停止该线程并显示另一个视图。我如何做到这一点。以下代码将线程的启动延迟了一个时间限制

Thread t = ... t.join(timelimit); 
if (t.isAlive) 
t.interrupt();

如何运行线程并在一段时间后关闭它。

您可以使用以下代码在给定的指定时间后运行

 Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            // after this is rung               
        }
    }, 5000);

你应该用这样的东西声明你的线程

public class GameLoopThread extends Thread{
private boolean running = false;

public void setRunning(boolean run){
    running = run;
}

@Override
public void run(){
    while(running){

    }
}
}
这是更安全的方法,为了停止,应该将正在运行的变量设置为false。否则,如果您停止thead,您将得到一个android异常。

您的工作线程

public class Worker extends Thread {
    private boolean isRunning = true;
    public void run() {
        while (isRunning) {
            /* do your stuff here*/
        }
    }

    public void stopWorker() {
         isRunning = false;
    }
}
public class Stopper extends Thread {
    private Worker worker;
    public void Stopper(Worker w) {
        worker = w;
    }

    public void run() {
        // wait until your timeout expires
        worker.stopWorker();
    }
}
你的停止线

public class Worker extends Thread {
    private boolean isRunning = true;
    public void run() {
        while (isRunning) {
            /* do your stuff here*/
        }
    }

    public void stopWorker() {
         isRunning = false;
    }
}
public class Stopper extends Thread {
    private Worker worker;
    public void Stopper(Worker w) {
        worker = w;
    }

    public void run() {
        // wait until your timeout expires
        worker.stopWorker();
    }
}

我更喜欢从外部中断线程,并在短时间间隔内检查中断状态:

try {
    while (!Thread.currentThread.interrupted()) {
        doSth();
    }
} catch (InterruptedException e) {
    // finished
}

在这种情况下,运行应该是不稳定的(或者您需要同步对它的访问)