2013-06-30 (日)
*[Android] AsyncTask周りを読む
今更感ありますが,今までAsyncTaskを使っていた箇所で,タスクの優先度や実行順序をコントロールしたくなって調べてた.
AsyncTaskはAndroidのバージョンごとに動きが違うので,一応確認.
- Android 1.6未満:AsyncTaskは1スレッドで実行される
- Android 1.6以降:ThreadPoolExecutorで5スレッド作ってる
- Android 3.0以降:5スレッドあるが,並列実行はしない
実はAndroid 3で挙動が変わったの知らなかったのですが,APIリファレンスにも書いてありますね…….ちなみに,setDefaultExecutor() なんていうメソッドがActivityThreadから呼ばれてて,アプリのtargetSdkVersionがHoneycomb以降の時にExecutorを切り替えている.@hideなので使えないですが.
自前のExecutorを使いたい場合は,executeOnExecutorを使えば良いみたいだけど,そもそもAsyncTask使う必要ない気がしてきたので,自分で作ることに.ただスレッドプールを新たに作ってしまうのちょっと嫌だなと思ってたら,AsyncTask.THREAD_POOL_EXECUTORが外から見えるようになってるのでこれ使おう.