2011-05-11 82 views
2

我有一个后台线程的android应用程序,其中包含用于从服务器发送/接收数据的套接字连接。Android,退出/暂停应用程序,如何销毁线程

如果我的应用程序结束(后退按钮等)或暂停(主页按钮,调用其他应用程序),处理此后台线程的最佳方式是什么?

我看到2种方式:创建后,启动线程

  • 覆盖onStop()onPause(),或onDestroy()

  • 之前,我只是想确保

    • 呼叫Thread.setDaemon(true)我的应用程序不会挂起或有其他奇怪的行为。

      编辑:

      另外,什么是关闭套接字的最佳解决方案?我是否也关闭它并使用inputStream?够了吗?

    回答

    1

    我建议使用某种类型的信号变量:做这样的事情

    public void run(){ 
    while(!stopped){ 
        // do work 
    } 
    
    // clean up 
    
    return; 
    } 
    

    然后在onStop()onDestroy()组停下来真的。你还需要确保你清理自己身后,如果你需要重新启动线程,你可以在onResumeonCreate中这样做。

    +0

    线程并不总是在背景上工作..它最终被调用,然后完成他的工作直到完成... 如果在某些工作中间发生某些事情时发生了问题,我需要清理它...因为线程可以访问套接字连接,所以我认为在不结束此套接字的情况下线程不能被中断。 虽然不知道最好的方法.. – cornelyus 2011-05-20 17:06:09

    +1

    是的,如果过程完全被杀死,那么你有点不幸。我不确定过程kill是否调用任何生命周期方法,但是在将'stopped'设置为true后,可以在Thread对象上放置一个'join',然后用'finally'子句关闭所有套接字工作提供套接字并执行所需的其他清理工作。 – Femi 2011-05-20 17:14:08

    +0

    嘿Femi ..关心发展呢?可能有些编码,请问? – cornelyus 2011-06-15 16:57:10