如何纠正停止Android主活动等待线程



我有一个andoid(api 21(主动脉,其中启动线程。按下一个按钮,我关闭线程和主动脉。这是中断线程和关闭活动的好解决方案吗?我尝试致电

mythread.cancel()
finishAndRemoveTask();

但是当主动脉/程序关闭时,由于线程还活着,因此崩溃了。

因此,当按钮单击时,我尝试更改代码并写下:

    mythread.interrupt();
    finishAndRemoveTask();

这是一个很好的解决方案吗?(我不知道我是否可以使用mythread.join((,因为线程无限运行。

在ongreate中我创建并启动线程

     myThread_read = new thread_read(handler_read);
     //starting thread
     myThread_read.start();

我知道我必须使用可运行的,但是此代码扩展了线程类。线程代码是:

   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
                }
            }
        }
    }

您可以尝试从异步施加托管线程,然后尝试停止活动。如果您需要在作业完成后一次停止线程,请在Asynctask的后执行后进行操作。

也可以通过尝试通过在活动上的销毁中中断((停止线程来解决另一种方法。您可以将运行方法修改为

while(中断((({return;}

可以参考以下链接当在Android上进行活动时,如何停止运行线程?

您可以尝试从异步施加托管线程,然后尝试停止活动。如果您需要在作业完成后一次停止线程,请在Asynctask的后执行后进行操作。

也可以通过尝试通过在活动上的销毁中中断((停止线程来解决另一种方法。您可以将运行方法修改为

while(中断((({return;}

是的gab74 ..通过扩展ondestroy((

来添加mythread.interupt。

并使用while(中断((({return;}修改线程的运行方法那是写逻辑,如果中断,然后退出线程。

最新更新