0

SDカードに保存されているすべての曲を取得するために、次のコードを使用しています。

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

さて、このコードがこの曲のリストを返すのに時間がかかるのはなぜですか。このコードを、プレーヤーのプレイリストの oncreate メソッドから呼び出される関数に含めました。
これが起こることです。
1: Android ph でアプリケーションの実行が初めて実行されると、プレイリストに何も表示されないため、空に見えます。
2: たとえば、30 秒後に再びプレイリストを呼び出すと、すぐにすべての曲が返されます。

したがって、このことを実行するのに時間がかかるかのように感じますか?
なぜこれが起こるのですか?

4

1 に答える 1

2

非同期タスクを使用して、ファイルを読み取ったり、何かをダウンロードしたり、ユーザーが待機する必要がある時間がかかる場合は、この目的で非同期タスクを使用することを考える必要があります。

1: 開発者リファレンスから: AsyncTask により、UI スレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラーを操作することなく、バックグラウンド操作を実行し、UI スレッドで結果を公開できます。http://developer.android.com/reference/android/os/AsyncTask.html

非同期タスクは、Params、Progress、および Result と呼ばれる 3 つのジェネリック タイプと、onPreExecute、doInBackground、onProgressUpdate、および onPostExecute と呼ばれる 4 つのステップによって定義されます。

2:したがって、非同期タスク クラスを次のように含めることができます。

 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 は、その execute メソッドを呼び出して引数を渡すことにより、onCreate メソッドから呼び出すことができます。

 new DoBackgroundTask().execute(URL);

3:最後に、AsyncTasks に関する非常に優れたチュートリアルもここにあります。 http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html

于 2013-09-01T10:23:14.727 に答える