カテゴリー:
ガイド
閲覧数:571 配信日:2013-09-29 07:50
シングルスレッド
single thread
・Androidは、キーのイベント配信等を行うスレッドが1つの「シングルスレッド」モデル
シングルスレッドとは?
アプリケーションソフトなどが、並行処理などを行わずにすべての演算を逐次に処理していくこと。スレッドと呼ばれる処理単位を複数生成し、並行して複数の処理を行う「マルチスレッド」に対応する語。
シングルスレッドで動作するプログラムは複数の動作を同時に行うように設計されておらず、すべての動作が逐次的に行われる。このため、時間のかかる処理を始めるとユーザの入力を受け付けられなくなったりする
シングルスレッドで動作するプログラムは複数の動作を同時に行うように設計されておらず、すべての動作が逐次的に行われる。このため、時間のかかる処理を始めるとユーザの入力を受け付けられなくなったりする
他スレッドからの操作
他スレッドからUI操作禁止
・他のスレッドからUI操作することは禁止されている
・この操作を行った場合、例外が発生してアプリがクラッシュする
時間がかかる処理を行うと?
固まったように見える
・Androidで時間がかかる処理を行うと、一時的にインターフェースが固まったようになる
・重い処理をメインスレッド(=UIスレッド)で行うことになるので、画面の処理が止まったように見える
ユーザ操作を受け付けない
・しかも、その処理が終わるまで、ユーザの操作を受け付けなくなってしまう
・そうするとアプリは正規の処理をしているのにも関わらず、ユーザはアプリがハングしてしまったのではないか?と疑問を抱いてしまう。また、反応が遅くて不快に思う
→使い勝手の悪いインターフェース
強制終了を選択
・インターフェースが固まってしばらくすると、応答しません的なエラーメッセージが表示される
・そこで、ユーザーが強制終了を選択すると、正常処理中にも関わらず、アプリは強制終了してしまう
ANR
Application Not Responding
・ネットワーク通信やデータベース操作など、時間を要する処理をメインスレッド上で実行すると、すべてのUIのイベントを受け付けることができなくなってしまう
・5秒以上この状態が続くと、ANR(Application Not Responding)と扱われ警告ダイアログが表示される
重い処理に対応するには?
対策
・非同期処理で画面系と処理を分けてこのエラーを出ないようにする
・重い処理はマルチスレッドを使い、バックグラウンド(=ワーカースレッド)で処理する必要がある
何のために非同期処理を行うのか?
非同期処理は必須。その理由は?
・アプリケーションのユーザビリティを向上させるため