2017-04-19 122 views
0

我有一个andoid(API 21)mainactivity在其中启动一个线程。 按下按钮我关闭线程和mainactivity。 这是一个很好的解决方案来中断线程和关闭活动? 我尝试调用如何纠正停止android主要活动等待线程?

mythread.cancel() 
finishAndRemoveTask(); 

但当mainactivity /程序关闭它崩溃,因为线程仍然活着。

所以按钮被点击时,我试图改变代码,并写上:

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

您可以尝试举办来自的AsyncTask线程,然后尝试停止活动如果需要暂时停止线程的工作完成后做到这一点。在asynctask的postExecute上。

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

而(中断()){回报;}

可以参考以下链接 How to stop a running thread when Activity on destroy at Android?

0

你可以尝试从的AsyncTask托管线程,然后尝试停止活动。如果在作业完成后需要停止线程,请在asyncTask的postExecute上执行。

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

而(中断()){回报;}

+0

你的意思是一个可以删除mythread.interrupt();并在OnDestroy方法中插入 mythread.cancel() @Override public void onDestroy(){ mythread.cancel(); super.onDestroy(); } – Gab74

0

是Gab74 ..通过扩展的onDestroy()

添加在的OnDestroy的mythread.interupt和修改使用While(中断()){return;}运行线程的方法 这是写入逻辑,如果中断,则退出线程。