2014-12-06 190 views
0

当我退出我的活动或应用程序时,无法停止此线程。无法停止android线程

public class MyThread extends Thread { 
     public Handler handler; 
     @Override 
     public void try{ 
       Looper.prepare(); 
       handler = new Handler(); 
       Looper.loop(); 
     } 
    } 
    ... 

myThread = new MyThread(); 
myThread.start(); 

final Runnable runnable = new Runnable() { 
     @Override 
     public void run(){ 
      doSomething(); 
      myThread.handler.postDelayed(this,30*1000); 
     } 
}; 
myThread.handler.post(runnable); 

@Override 
public void onStop(){  
     myThread.handler.removeCallbacksAndMessages(null); 
     myThread.handler.getLooper().quit(); 
     myThread = null;   
} 

我可以证实,所有的onStop()代码运行,但仍logcat中显示线程中运行后,我退出应用程序。

我认为,即使我拆下电池,并用大锤粉碎设备它仍然会继续运行,我已经尝试了一切。 :〜)我一定会错过一些关于处理程序,循环和线程的东西。请帮忙。

+1

看看这个链接: http://stackoverflow.com/questions/4756862/how-to-stop-a-thread – 2014-12-06 12:57:05

+0

尝试分配空值主题 – 2014-12-06 12:57:41

+0

MyThread的= NULL也做不停止的事情,这是坚不可摧的 – aez 2014-12-06 14:42:39

回答

0

添加一个布尔标志的活动,说“shouldThreadRun”中的onResume设置为true(),以在onPause()

在运行的线程()设置为false,请检查活动是否仍然运行

if(shouldThreadRun){ 
    doSomething(); 
    myThread.handler.postDelayed(this,30*1000); 
} 
+0

谢谢帕特里克。我不确定这是怎么可能的,但即使在我的onPause()中设置了shouldThreadRun = false,它仍然会继续运行,并且我在该线程的run()中设置了一个断点,并且我发现某种程度上应该是线程运行已被重置为真实,我不知道这是可能的。我甚至宣称它是不稳定的。 – aez 2014-12-06 18:34:56

+0

我也会问,那么looper.quit()有什么用?或removeCallbacksAndMessages()? – aez 2014-12-06 18:47:31

+0

尝试阻止使用Looper和Handler,而不是使用AsyncTask进行后台任务和UI交互。我保证异步任务可以通过标志停止。 – 2014-12-07 03:24:04