2013-09-01 200 views
0

我正在使用以下代碼獲取存儲在SD卡中的所有歌曲。這段代碼爲什麼需要很長時間?

https://stackoverflow.com/a/12227047/2714061

那麼爲什麼會出現這種代碼需要很長時間恢復的歌曲列表中。 我已將這段代碼包含在一個函數中,該函數從播放器播放列表中的oncreate方法中調用。
這是發生了什麼事。
1:當我的android ph第一次執行應用程序運行時,播放列表沒有任何顯示,因此被看作是空的。
2:好了之後 - > 30秒,當我再次呼叫播放列表時,它立即返回所有歌曲。

因此,給人的感覺好像這件事需要時間來執行?
這是爲什麼發生?

+0

在背景上運行它,然後加載可能有太多 – Trikaldarshi

+0

@Photon我也嘗試使用相同的線程,但相反,造成不必要的複雜性,沒有結果 – user2714061

回答

2

如何使用異步任務,讀取文件或下載的東西,需要需要用戶等待的時間,你必須考慮使用異步任務用於此目的,

1:從開發人員參考我們有: AsyncTask使適當和簡單的使用UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。 http://developer.android.com/reference/android/os/AsyncTask.html

異步任務由3個泛型類型定義,稱爲Params,Progress和Result,以及4個步驟,分別稱爲onPreExecute,doInBackground,onProgressUpdate和onPostExecute。

2:所以,你可能包括一個異步任務類爲:

new DoBackgroundTask().execute(URL); 

class DoBackgroundTask extends AsyncTask<URL, Void, ArrayList> { 
      /* 
      URL is the file directory or URL to be fetched, remember we can pass an array of URLs, 
      Void is simple void for the progress parameter, you may change it to Integer or Double if you also want to do something on progress, 
      Arraylist is the type of object returned by doInBackground() method. 

      */ 
    @Override 
    protected ArrayList doInBackground(URL... url) { 
    //Do your background work here 
    //i.e. fetch your file list here 

       return fileList; // return your fileList as an ArrayList 

    } 

    protected void onPostExecute(ArrayList result) { 

    //Do updates on GUI here 
    //i.e. fetch your file list from result and show on GUI 

    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     // Do something on progress update 
    } 

} 
//Meanwhile, you may show a progressbar while the files load, or are fetched. 

這的AsyncTask可以從你onCreate方法通過調用其執行方法並傳遞參數給它叫

3:,最後,還有關於這裏AsyncTasks一個非常好的教程,http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html

+0

Thankyou @twntee我肯定會包括這個! – user2714061

相關問題