我是一个启动线程的andoid(API 21)主要活动。 按下按钮我关闭线程和主动。 这是中断线程和关闭活动的好方法吗? 我试着打电话
mythread.cancel()
finishAndRemoveTask();
但是当mainactivity / program关闭时,它崩溃了,因为线程仍处于活动状态。
因此,当单击按钮时,我尝试更改代码并写入:
mythread.interrupt();
finishAndRemoveTask();
这是一个很好的解决方案吗? (我不知道我是否可以使用mythread.join()因为线程无限运行..
在OnCreate中,我创建并启动线程
myThread_read = new thread_read(handler_read);
//starting thread
myThread_read.start();
我知道我必须使用Runnable但是这段代码扩展了Thread类。 线程代码是:
private class thread_read extends Thread {
Handler mHandler;
String logString ;
protected volatile boolean running;
/* constructor */
thread_read(Handler h) {
mHandler = h;
}
public void start()
{
Logger.WriteString("thread_read", "Starting");
running = true;
super.start();
}
public void cancel()
{
Logger.WriteString("thread_read", "Stopping");
running = false;
}
public void run() {
while (running) {
try {
Thread.sleep(500); // 500 msecs
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
break;
}
// do works
}
}
}
}
答案 0 :(得分:0)
您可以尝试从asynctask托管线程,然后尝试停止活动。如果您需要在作业完成后停止一次,请在asExctask的postExecute上执行此操作。
还可以通过在活动的destroy中通过interrupt()来停止线程的另一种方法。 您可以将run方法修改为
而(中断()){返回;}
可以参考以下链接 How to stop a running thread when Activity on destroy at Android?
答案 1 :(得分:0)
您可以尝试从asynctask托管线程,然后尝试停止活动。如果您需要在作业完成后停止一次,请在asExctask的postExecute上执行此操作。
还可以通过在活动的destroy中通过interrupt()来停止线程的另一种方法。您可以将run方法修改为
而(中断()){返回;}
答案 2 :(得分:0)
是Gab74 ..通过扩展onDestroy()
在ondestroy中添加mythread.interupt并使用While(interrupted()){return;}修改线程的run方法 如果中断则编写逻辑然后退出线程。