Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要关于在android服务中处理多个线程的建议吗_Android_Multithreading_Android Service_Android Mediaplayer - Fatal编程技术网

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

需要关于在android服务中处理多个线程的建议吗,android,multithreading,android-service,android-mediaplayer,Android,Multithreading,Android Service,Android Mediaplayer,我一直在尝试实现一个android服务,它可以将音频流下载到文件中,然后可以同时播放该文件 这样我也可以实现缓冲 我正在使用多个线程。所以我第一次尝试了ExecutorService 代码是,有很多注释需要解释 它可以完美地下载和播放流一段时间,但几分钟后(比如1或2分钟后),它会停止,不会抛出任何异常,甚至不会在日志中打印任何内容 代码说明: 要关注的主要类是ServiceExecutor,它是一个android服务 它首先启动一个异步任务来启动整个流程。其中: 设置将在其中下载文件的临时文件

我一直在尝试实现一个
android服务
,它可以将音频流下载到文件中,然后可以同时播放该文件

这样我也可以实现缓冲

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

代码是,有很多注释需要解释

它可以完美地下载和播放流一段时间,但几分钟后(比如1或2分钟后),它会停止,不会抛出任何异常,甚至不会在日志中打印任何内容

代码说明:

要关注的主要类是ServiceExecutor,它是一个android服务

  • 它首先启动一个异步任务来启动整个流程。其中:
  • 设置将在其中下载文件的临时文件
  • 启动线程以获取后台流的持续时间。缓冲时,此持续时间将非常有用。 注意:此线程不会播放流
  • 启动第二个线程,将流下载到临时文件中
  • 启动第三个线程以播放文件中的流
  • 第三个线程将在其MediaPlayer的onPrepared()函数中内部启动forth线程来处理流的缓冲
  • 通过缓冲,我的意思是,递归地检查文件是否有足够的数据来连续播放流。 在每次通话中,它都会检查临时文件的剩余流是否少于2秒&文件仍在下载,然后暂停媒体播放器5秒钟。 它维护一个变量“pausedatamillisec”,该变量记录流暂停的位置,以便在播放器也突然停止时,可以从那里恢复流

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

    因此,请随时发布任何评论或建议。我不会难过,而是要快乐

    请检查一下代码

    我知道密码。但我也想试试我的


    谢谢

    您可能想了解一些替代协议(流式传输),它们为您想做的事情提供了更好的支持@罗伯特朗特里-我会研究你的建议。但我还是想知道我做错了什么。Thanks@WilliamSeemann-我已经在代码中处理了过早完成的问题&它正在工作。但是,当错误发生时,应用程序的UI会被卡住&eclipse(在调试模式下)只会打开ThreadPoolExecutor类。然后,若我按F8键,那个么应用程序将显示错误对话框并退出。谢谢