在android中创建活动时,我启动了一个线程
当单击“停止”时,它将中断线程以在特定时间后查看我的数据,之后我通过单击“启动”按钮启动线程 它将再次启动线程
有时它可以正常工作, 有时候我收到中断错误,
strt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Drawer.start();
});
stp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Drawer.interrupt(); });
该怎么办?
答案 0 :(得分:0)
假设Drawer
是一个线程,则不能两次启动它:"It is never legal to start a thread more than once"。关于如何编写此代码的基本假设是有缺陷的。
我建议不要直接使用线程。代替。使用ExecutorService
,例如:
ExecutorService executor = Executors.newFixedThreadPool(1);
然后,通过开始按钮的onClickListener将工作提交到该池:
future = executor.submit(runnable);
其中runnable
是您要完成的工作。
返回的Future
可以传达运行runnable
的结果,但还可以让您执行取消操作(即要求其停止运行):
future.cancel(true);
其中true
表示您想中断正在运行它的基础线程。
因此,在按下开始按钮时,将future
存储在成员变量中,然后在按下停止按钮时按上述取消操作。
请注意,您需要使可运行的句柄中断:这不是“免费”发生的事情。中断是一种合作机制:代码可以自由响应中断(或不响应)。