如何纠正停止android主要活动等待线程?

时间:2017-04-19 09:01:42

标签: java android multithreading

我是一个启动线程的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
                }

            }
        }
    }

3 个答案:

答案 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方法 如果中断则编写逻辑然后退出线程。