【问题标题】:Android , exiting / pausing application, how to destroy threadAndroid,退出/暂停应用程序,如何销毁线程
【发布时间】:2011-05-11 17:24:18
【问题描述】:

我有一个带有后台线程的 android 应用程序,其中包含用于从服务器发送/接收数据的套接字连接。

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

我见过两种方式:

  • 在创建之后和启动线程之前调用Thread.setDaemon(true)

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

我只是想确保我的应用程序不会挂起或出现其他奇怪的行为。

编辑:

另外,关闭套接字的最佳解决方案是什么?我要关闭它和 inputStream 吗?够了吗?

【问题讨论】:

    标签: java android multithreading sockets


    【解决方案1】:

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

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

    然后在onStop()onDestroy() 中设置stopped 为true。您还需要确保自己也进行清理,如果您需要重新启动线程,请在 onResumeonCreate 中执行此操作。

    【讨论】:

    • 线程并不总是在后台工作..它最终被调用,然后完成他的工作直到完成......如果在我中间发生一些事情,我需要清理它工作......因为线程可以访问套接字连接,所以我认为不结束这个套接字就不能中断线程。虽然不确定最好的方法..
    • 是的,如果进程被完全杀死,那你就有点不走运了。我不确定进程 kill 是否调用了任何生命周期方法,但是您可以在将 stopped 设置为 true 之后在 Thread 对象上放置 join,然后使用关闭的 finally 子句包装所有套接字工作启动套接字并执行您需要的任何其他清理工作。
    • 嘿,Femi.. 关心开发吗?请给我一些编码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多