需要有关在android服务中处理多个线程的建议

时间:2013-03-24 15:09:17

标签: android multithreading android-service android-mediaplayer

我一直在努力实现一个可以将音频流下载到文件中的android service。然后可以同时播放该文件。

这样我也可以实现缓冲。

我正在使用多个线程。所以我第一次尝试ExecutorService

代码是here on github,有很多评论需要解释。

它会在某段时间内完美地下载和播放流,但过了一会儿(比如在1或2分钟后)它会停止而不会抛出任何异常&甚至不在日志中打印任何东西

代码说明:

要关注的主要类是ServiceExecutor,这是一个Android服务。

  1. 首先启动AsyncTask以启动整个过程。其中:
  2. 设置将下载文件的临时文件。
  3. 启动一个线程以在后台获取流的持续时间。这个持续时间在缓冲时很有用。 请注意,此主题不会播放流。
  4. 启动第二个线程,将该流下载到临时文件中。
  5. 启动第三个线程以播放文件中的流。
  6. 这个第三个线程将在其MediaPlayer的内部onPrepared()函数内部启动线程以处理流的缓冲。
  7. 通过缓冲我的意思是,递归检查文件是否有足够的数据来连续播放流。 在每个呼叫中​​,它检查临时文件是否具有少于2秒的剩余流量&文件仍在下载,然后暂停媒体播放器5秒钟。 它维护一个变量'pausedAtMilliSec',它记录流暂停的位置,这样如果玩家突然停止,它就可以从那里恢复。

    正如你现在所看到的,我在线程方面不是很好。 在我看来,问题在于多线程处理(似乎,但不确定)。

    随时发布任何评论或建议。我不会心疼,而是快乐。

    请检查一次代码。

    我知道PocketJourney's代码。但是也想尝试我的。

    谢谢

0 个答案:

没有答案