-1

我在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();  });

该怎么办?

4

1 回答 1

1

假设Drawer是一个线程,你不能启动它两次:“多次启动一个线程是不合法的”。您关于如何编写此代码的基本假设是有缺陷的。

我建议不要直接使用线程。反而。使用ExecutorService,例如:

ExecutorService executor = Executors.newFixedThreadPool(1);

然后,在您的开始按钮的 onClickListener 中向该池提交工作:

future = executor.submit(runnable);

runnable你想做的工作在哪里。

返回Future的是一个传达运行结果的东西runnable,但也可以让你做一些事情,比如取消它(即要求它停止运行):

future.cancel(true);

wheretrue意味着您要中断正在运行它的底层线程。

因此,future当您按下开始按钮时存储在成员变量中,然后在按下停止按钮时如上所述取消它。

请注意,您需要使您的可运行句柄中断:这不是“免费”发生的事情。中断是一种协作机制:代码可以自由地响应中断(或不响应)。

于 2019-05-14T07:05:38.963 回答