androidでマルチスレッドを実現する4通りの方法
androidでのマルチスレッドプログラミングについて
iOSではGCD(グローバルセントラルディスパッチ)とBlocksを利用することで簡単に分かりやすくマルチスレッドを実装することができる。
androidはJavaのThreadをそのまま使用するが、シリアルキューを実現するためには Handler を使用することになる。
androidはDalvikVMというプロセス内で複数のアプリが実行されるので、インスタンス変数が格納されるヒープメモリのGC(ガーベージコレクション)やヒープメモリキャッシュの影響などによりThread間でメモリ領域を共有する際に想定外の動作をする場合があるので注意が必要となる。
<iOS>
iOSにはGCDという実にC言語のメリットを生かしたframeworkによって、マルチスレッドが簡単に実装することができる。
・コンカレントキュー
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// ここはサブスレッドで実行される
});
・シリアルキュー
dispatch_async(dispatch_queue_create("serial_queue_name", 0), ^{
// ここはサブスレッドで実行される
});
<android>
androidでマルチスレッドを実現するには次の4通りの方法がある。
android(Java)のスレッドにはコンカレント、シリアルの概念がない。
Threadはコンカレントキューで実装されている。
シリアルキューを実装するためには、Handler#postを使用する。
・Thread無名クラス
Javaでマルチスレッド手続きを行うもっとも簡単な方法
Looperには対応していない
(new Thread(new Runnable() {
@Override
public void run() {
// ここはサブスレッドで実行される
}
})).start();
・Thread
Java標準のスタンダードな方法
Looperには対応していない
// Runnableを継承したクラスを定義して
public class RannableClass implements Runnable {
public RannableClass() {
// コンストラクタ
}
@Override
public void run() {
// ここはサブスレッドで実行される
}
}
// サブスレッドで実行開始する
RannableClass rannableClass = new RannableClass();
Thread subThread = new Thread(rannableClass);
subThread.start();
・HandlerThread
Looperに対応しているので、Handlerで逐次RunnableやMessageをキューイングしたい場合に使用する。
シリアルキューを実装したい場合に使用する。
// サブスレッドを実行開始する
HandlerThread thread = new HandlerThread("sub_thread_name");
thread.start();
// HandlerによってRunnableをサブスレッドにキューイングする
Handler handler \= new Handler(thread.getLooper());
handler.post(new Rannable() {
@Override
public void run() {
// ここはサブスレッドで実行される
}
});
・AsyncTask
ネットワーク通信を伴うファイルダウンロードなどの場合に使用する
// インナークラスを作って
private class DownloadTask extends AsyncTask> {
@Override
protected List doInBackground(String... param) {
// ここはサブスレッドで実行される
}
@Override
protected void onPostExecute(List results) {
// ここはメインスレッドで実行される
}
}
// サブスレッドで実行開始する
new DownloadTask().execute(url, fileName);
2022年9月 | ||||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
  |   |   |   | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |   |
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち