2011-06-03 54 views
2

我在活动中创建了一个线程。起初,我认为在Activity上调用onDestroy()时,线程也会被终止。但是我错了。线程仍然继续运行。我应该何时取消/杀死一个线程?

所以我决定取消onDestroy()方法中的线程。一切正常。

但是有1个问题:onDestroy()不保证被调用。例如:Activity被操作系统突然中止。

那么在这种情况下最好的做法是什么?谢谢。

回答

1

你应该做一切有关清理onPause()。你是正确的,onDestroy()不会总是被调用,但onPause()总是被调用时,活动移动到后台或被杀害。但要小心使这个方法中的代码真的很轻量级,因为在这个方法返回之前,一个活动不能进入后台。

+0

我也想过它宣布所有MyApplication,但如果)活动的的onPause(简称只是因为在它上面还有另一个Activity,如果线程正在下载某些内容,取消该线程是没有意义的。 – namanhams 2011-06-04 08:18:09

+0

你什么时候需要准确地停止线程?如果您希望下载在您的活动从屏幕上消失后继续运行,您可能需要在服务中下载内容。如果你正在做一些后台任务,你不应该依赖活动状态。 – Malcolm 2011-06-04 11:51:00

-2

我提议把Thread杀害ApplicationonTerminate方法

public class MyApplication extends Application 
{ 
    MyThread myThread; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     myThread=new MyThread(); 
     myThread.start(); 
    } 

    @Override 
    public void onTerminate() 
    { 
     super.onTerminate(); 
     myThread.interrupt(); 
    } 
} 

确保在AndroidManifest.xml

+0

-1:此信息具有误导性。从这种方法的Android文档:“它永远不会被生产的Android设备调用,通过简单地杀死进程来删除进程;这样做时不会执行用户代码(包括此回调)”。 – Malcolm 2011-06-04 11:53:26

+0

永远不会知道 - thanx! – barmaley 2011-06-05 18:42:40