2013-05 << 2013-06 >> 2013-07

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が外から見えるようになってるのでこれ使おう.

2013-05 << 2013-06 >> 2013-07