【问题标题】:How to stop background socket thread如何停止后台套接字线程
【发布时间】:2015-01-09 07:28:19
【问题描述】:

我创建了应用程序,当用户单击开始按钮时,它将向服务器发送音频流。为此,我创建了一个套接字线程来向服务器发送音频。按下停止按钮后它停止。它工作得很好,但是问题是当我开始流式传输并通过按后退按钮或从操作栏菜单从当前活动导航到不同的活动并进入主屏幕以停止流式传输时,我无法停止流式传输。这意味着线程正在后台运行。

所以我的问题是如何停止该线程或流式传输。

【问题讨论】:

  • 您应该在此处发布您的代码,以便其他人可以看到并提供帮助。
  • @GPRathour - 总之,没有。发帖人描述了他们代码的操作方式,这种方式比将一页代码转储给我们要有用得多,而且对于目前的目的来说完全足够了。

标签: android multithreading serversocket


【解决方案1】:

在导航到其他活动之前尝试关闭套接字。

【讨论】:

    【解决方案2】:

    覆盖onPause() 方法并关闭那里的套接字。

    【讨论】:

      【解决方案3】:

      一个相当干净的解决方案是在你的线程之间共享一个 volatile 标志。您的音频流线程应该在每次处理数据块时检查这一点,关闭连接并在它设置为 false 时停止。当调用 onPause() 时,您的 UI 线程可以将其设置为 false - 或者 onStop() 可能更合适,因为这表明您的 Activity 何时不再可见。

      这可能意味着您的流式处理线程会挂起几分之一秒,并从发送的音频中多获得一点点,但这在实践中不太可能成为问题。

      【讨论】:

      • 感谢您的回复。但我通过阻止用户在应用程序广播时从后退按钮和导航菜单导航以简单的方式解决了我的问题。 :)
      • 那行不通 - 你不能阻止用户导航的所有方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      相关资源
      最近更新 更多