2

私の過去2回の質問は短く、詳細ではなかったので、今回は最善を尽くします。私は約430音の大きなサウンドボードを持っています。とても大きいので、いくつかのデバイスで2つのサウンドマネージャーを作成する必要があります。とにかく、ロード画面で、AsyncTaskを実装しようとしています。私は一般的にそのタイプとその4つのステップを理解していますが、パラメーターを理解していません。参考までに、簡単な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);

これが私の3番目の質問です。他に情報が必要な場合は、遠慮なく質問してください。このスレッドを次の20分間監視し、情報をすばやく編集します。

4

1 に答える 1

0

あなたが与える例では...

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

URL、Integer および Long (Params、Progress、Result として知られている) の 3 つのタイプは、必要に応じて何でもかまいません。

最初の ( ) は、インスタンスのメソッドにURL渡す必要があるパラメーターのタイプです。より正確には、メソッドを見ると、基本的に の配列を受け入れることを意味することがわかります。1つだけ渡す必要がある場合でも、単一アイテムの配列として渡す必要があります.execute(<params>)AsyncTaskdoInBackground()URL...URLURL

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

doInBackground(URL... urls)メソッドでは、s URLasなどurls[0]にアクセスします。urls[1]for (URL u:urls)

この例の 2 番目のジェネリック型 ( Integer) は、 が期待する型onProgressUpdate(Integer progress)です。これも配列として渡す必要があります。たとえば、10 個のファイルをダウンロードする場合は、各ファイルがダウンロードされた後に呼び出します。たとえば、myProgress[0] = 11 つのファイルが正常にダウンロードされたことを示します。これにより、ある種の進行状況ダイアログを更新できます。

最後に、3 番目のジェネリック型 ( Long) が再び内部で使用されます。この型onDoInBackground(...)は必ず返され、 に渡されonPostExecute(Long result)ます。これは単一の結果であり、配列ではないことに注意してください。あなたの結果が何であるかに応じて、どのようにonPostExecute()振る舞うべきかによって異なります。

私が言ったように、ジェネリックを含む任意のタイプを使用できますVoid(大文字に注意してください)...

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

この場合、 に何も渡さず、.execute()(publishProgress()を呼び出すためにonProgressUpdate()) を呼び出すことはできますが、データを渡すことはできません。同様に、onPostExecuteは実際の結果データを受け取りません。

于 2012-01-05T23:41:24.813 に答える