用于媒体播放器的Android AsyncTask通信



我的任务是下载一些文件并按顺序播放。

现在我有一个AsynkTask调用服务器,等待服务器产生文件,然后下载它,我为n文件这样做。有一个最后的数组列表在我的活动,是由AsyncTask与下载文件的路径填充。

另一个Asynktask等待(使用迭代Thread.Sleep()和最大迭代次数)在doInBackground中,ArrayList的第一个元素被填满,所以它退出doInBackground,并在postexecute()中初始化这个文件的VideoView并播放它,其他文件在VideoView的oncompletion方法中播放。

现在我知道这不是最好的方式来做到这一点,我正在寻找另一种方式来Asynctask之间的通信。我知道在While迭代中使用全局ArrayList和Thread.Sleep()并不好。我尝试使用自定义回调函数,但函数的代码需要uthread,因为需要启动VideoView。我不能从doinBackground()调用callback。

有什么建议吗

我不认为asynctask是你的情况下最好的选择。缺点之一是你不能在asynctask中真正等待任何类型的回调(除非做一个肮脏的hack)。

另一个缺点是默认情况下异步任务是串行运行的,所以你不能让一个异步任务等待另一个异步任务的结果(这种行为可以改变,但我不认为这是你想要做的事情)。

一个更简洁的解决方案是使用HandlerThread,然后在它们之间发送消息。这些线程将处理一个给定的消息,或者运行一个Runnable,然后等待,直到它们得到下一个消息/Runnable。因此,您可以轻松地设置它们之间的通信

最新更新