在服务中播放媒体asynctask会导致其他asynctasks锁定

时间:2014-06-24 11:09:11

标签: java android multithreading service android-asynctask

我正在使用AsyncTask播放媒体,而我正在使用服务。问题是,当我的AsyncTask(在服务中)运行时,我使用AsyncTask与Web服务器通信的应用程序的另一部分在播放完成之前不能正常工作。 (播放不缓冲的媒体)。

我已经尝试删除AsyncTask并使用新线程,但我无法在此模式下更新UI。

我该怎么办才能修复它?

2 个答案:

答案 0 :(得分:0)

您可能不想要AsynctaskServiceService是专为长时间运行的后台任务而设计的。 ' Asynctask旨在轻松启动新线程,执行一些长时间运行的任务,然后将数据发送到UI线程。

只有一个UI线程,因此,如果您要更新用户界面,则会阻止用户互动。

如果您正在播放音乐,则可能需要Service来生成新的Thread,以便它可以在后台不断下载歌曲。例如,如果用户按下按钮并加载视频,则可能需要Asynctask来执行下载。

通常,可以使用Asynctask根据用户请求下载媒体文件(或者,如果您在后台下载,则可能会使用Service)。然后交换数据并使用Android的MediaPlayer工具播放视频文件:

http://developer.android.com/guide/topics/media/mediaplayer.html

请注意,与Asynctask不同,创建Service并不意味着您已创建新的ThreadService可以在UI线程上运行。但一般来说,Service的大多数用例都要求他们启动一个新的Thread来完成他们的工作。

答案 1 :(得分:0)

最后,我使用了服务处理程序来创建延迟时间