この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
asynctaskメモ [2015/09/16 10:31] sou |
asynctaskメモ [2015/12/11 13:43] (現在) sou [パラレル実行時のスレッドプール] |
||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| - | ** スレッドプール ** | + | ===== Executor ===== |
| + | |||
| + | ■AsyncTaskで選択出来る実行モード\\ | ||
| + | ・THREAD_POOL_EXECUTOR (パラレル実行)\\ | ||
| + | ・SERIAL_EXECUTOR (シリアル実行)\\ | ||
| + | \\ | ||
| + | ■AsyncTask#execute() を実行した際の実行モード\\ | ||
| + | ・Gingerbread(2.x系)\\ | ||
| + | THREAD_POOL_EXECUTORが採用される\\ | ||
| + | \\ | ||
| + | ・ICS以降(4.x系~)\\ | ||
| + | SERIAL_EXECUTORが採用される\\ | ||
| + | \\ | ||
| + | ■ICS以降でパラレル実行するには\\ | ||
| + | AsyncTask#executeOnExecutor(Executor, Object...)メソッドを使用する\\ | ||
| + | ExecutorにAsyncTask.THREAD_POOL_EXECUTORを指定\\ | ||
| + | \\ | ||
| + | |||
| + | ===== パラレル実行時のスレッドプール ===== | ||
| + | 下記のように設定されている模様。\\ | ||
| 並列多重度: 5 (CORE_POOL_SIZE)\\ | 並列多重度: 5 (CORE_POOL_SIZE)\\ | ||
| 最大プール数: 128 (MAXIMUM_POOL_SIZE)\\ | 最大プール数: 128 (MAXIMUM_POOL_SIZE)\\ | ||
| キューイング数: 10 (sPoolWorkQueue)\\ | キューイング数: 10 (sPoolWorkQueue)\\ | ||
| - | 並列処理が5多重を超えるとキューイングされる。 | + | 並列処理が5多重を超えるとキューイングされる。\\ |
| - | 要求のキューイングが出来なかった場合は最大128までプールする。 | + | 要求のキューイングが出来なかった場合は最大128までプールする。\\ |
| + | \\ | ||
| + | GridViewを高速スクロールした際などに、プール数が128を超えてしまい、\\ | ||
| + | RejectedExecutionExceptionがthrowされる\\ | ||
| + | |||
| + | ===== Viewの参照を渡す場合はWeakReferenceを使用する ===== | ||
| + | ViewがGCで破棄されるタイミングはActivityが破棄されるタイミングであるべきなので、\\ | ||
| + | AsyncTaskがViewの参照を保持しないよう、WeakReferenceを使用する。 | ||
| + | |||