我的任務是下載一些文件並按順序播放它們。Android的AsyncTask通信媒體播放器
現在我有一個AsynkTask調用服務器,等到服務器生成文件,然後下載它,我這樣做爲n文件。 我的活動中有一個最終的ArrayList,由AsyncTask填充下載文件的路徑。
另一個Asynktask等待(使用迭代的Thread.Sleep()和最大迭代次數)在doInBackground中ArrayList的第一個元素被填充,所以它從doinbackground退出並在postexecute()初始化一個VideoView與這個文件並播放它,其他文件在VideoView的OnCompletation方法中播放。
現在我知道這不是最好的方式來做到這一點,我正在尋找Asynctask之間溝通的另一種方式。我知道在While迭代中使用全局ArrayList和Thread.Sleep()並不好。 我嘗試使用自定義回調函數,但函數代碼需要UIThread,因爲需要啓動VideoView。所以我不能從doinBackground()調用回調函數。
有什麼建議嗎?
Asynktask可以使用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)以並行模式運行。 現在我第一次下載後,解決了使用runOnUiThread,所以我刪除while()和Thread.sleep()。但是現在我看到HandlerThread – tulkas85
是的,您可以使用自定義執行程序使AsyncTask並行運行,這就是爲什麼我說「此行爲可以更改」。但總的來說,如果你認爲你需要多個asyntasks彼此通信,通常HandlerThread是一個更好的選擇。 –