2012-01-05 21 views
2

我過去的兩個問題很短並且沒有詳細說明,所以這次我會盡我所能。我有大約430個聲音的大型音板。它非常大,我必須在某些設備上創建2個soundmanagers。無論如何,在加載屏幕上,我試圖實現一個AsyncTask。我通常瞭解它的類型和4個步驟,但我不明白這些參數。這裏有一個簡單的AsyncTask供參考。如何在加載屏幕上創建Asynctask以將聲音加載到管理器中

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 

    } 
    return null; 
} 

protected void onProgressUpdate(Integer... progress) { 

} 

protected void onPostExecute(Long result) { 

} 
} 

我需要在後臺做的就是添加聲音,我的經理是這樣的: SoundManager2.addSound(415,R.raw.rubber);

請這是我的第三個問題,所以如果您需要其他信息,請不要猶豫,我會在接下來的20分鐘內看這個帖子,我會盡快用這些信息編輯它!

回答

0

在你給的例子...

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {...} 

三種類型的URL,整數和長(被稱爲PARAMS,進度,效果)可以是任何你需要他們。

第一個(URL)是您必須傳遞給AsyncTask實例的.execute(<params>)方法的參數類型。更準確地說,當您看到doInBackground()方法時,您將看到URL...,這基本上意味着它將接受URL的數組。即使你只需要通過一個URL你仍然必須把它作爲一個單項陣列

URL[] myURLs = new URL[] {<comma-separated URLs here>}; 
new DownloadFilesTask().execute(myURLs); 

doInBackground(URL... urls)方法您訪問URL S作爲urls[0]urls[1]等或類似for (URL u:urls)

本示例中的第二種類型(Integer)是onProgressUpdate(Integer progress)預期的類型。再次,這必須作爲一個數組傳遞。例如,如果您要下載10個文件,請在每個文件下載後調用它。例如myProgress[0] = 1表示一個文件已被成功下載。這使您可以更新某種進度對話框。

最後,第三個通用類型(Long)再次在內部使用,並且類型onDoInBackground(...)必須返回並傳遞到onPostExecute(Long result)。注意這是一個單一的結果,而不是一個數組。取決於你的結果取決於onPostExecute()應該如何表現。

就像我說的,你可以使用任何類型,包括通用Void(注意大寫字母)...

private class MyAysncTask extends AsyncTask<Void, Void, Void> 

在這種情況下,你不及格什麼.execute(),儘管你仍然可以調用publishProgress()(以請致電onProgressUpdate()),您無法將任何數據傳遞給它。同樣,onPostExecute將不會收到任何實際結果數據。