我有一个主题类,它在活动的onCreate
中出现。
class MyThread extends Thread
{
void run()
{
//My code which takes time.
}
}
//-------------------------- To run the thread
MyThread mThread = new MyThread();
mThread.start();
在某些外部事件中,我需要停止/销毁当前正在运行的线程
然后我创建一个MyThread的新副本,并在新线程上调用start
函数来运行它。
但是我无法销毁/停止之前运行的线程 是否有任何API可以破坏正在运行的线程。
答案 0 :(得分:6)
你无法销毁......只有android会在需要时停止线程..你无法停止或销毁它......反而尝试这样..
class MyThread extends Thread
{
void run()
{
while(bool){
//My code which takes time.
}
}
}
// --------------------------运行线程
MyThread mThread = new MyThread();
mThread.start();
现在当你想要停止线程时......将bool值改为false
bool=false;
现在你的代码没有运行......你可以开始新的线程...
答案 1 :(得分:4)
Thread.interrupt()方法是停止正在运行的线程的可接受方式,但是一些实现细节在你身上:如果你的线程正在执行IO(或任何其他可以抛出InterruptedException),那么你有责任确保在停止线程之前关闭已打开的所有资源。
This page表明为什么早期版本的Java中存在的某些线程功能已被弃用,以及为什么Thread.destroy()从未实际实现过。
答案 2 :(得分:2)
你可以使用AsyncTask insted,因为它在android中被称为Painless Threading。实施后,您无需担心线程管理。
AsyncTask可以轻松处理,并且处理ui非常容易。
答案 3 :(得分:0)
您可以实现自己的stopThread方法,而不是使用Thread.interrupt()或任何其他可能引发异常的方法。为此,例如,您必须具有名称为“ keepRunning”的局部布尔变量。 如果您的工作代码中有一个for循环或while循环需要时间,则可以检查布尔值,如果为false,则中断循环,您的代码将不再运行。
class MyThread extends Thread
{
boolean keepRunning = true;
void run()
{
//inside your for loop
if (keepRunning) {
//keep running code which takes time.
}
else break;
}
void stopThread() {
keepRunning = false;
}
}
//To run the thread
MyThread mThread = new MyThread();
mThread.start();
//To stop the thread
mThread.stopThread();
停止线程后,可以再次将其初始化为mThread。
答案 4 :(得分:-1)
尝试这样的事情......
class MyThread extends Thread
{
void run()
{
//My code which takes time.
}
}
//-------------------------- To run the thread
MyThread mThread = new MyThread();
mThread.start();
// PERFORM ALL YOUR OPERATIONS HERE..
mThread.destroy();