AndroidはUIのthread上でネットワーク通信を行おうとすると、エラーが発生してしまいます.その他、時間のかかる処理もUI threadで実行すべきではありません.

これらの場合の実装方法を紹介します.

UI threadとは、ActivityやFragmentの処理を実行しているthreadです.

基本的にこのthread上で処理を行っていくのですが、ネットワーク通信をはじめとする重い処理はこのthread上で実行できません.

これは、その処理中画面が固まってしまい、ユーザビリティが低下するためです.

別threadで処理を実行する簡単な方法は以下のようになります.

普通のJavaと同じですね.

 

別Thread単体で処理が完結する場合はこの実装でいいのですが、大抵は処理結果を画面に表示したいかと思います.

このような場合に、単純にCallback用のクラスを作成してrunの中で実行してもうまくいきません.

 

このように非同期処理(別Threadで行う処理)結果を画面に戻したい場合は、

AsyncTaskを利用します.

AsyncTackはGenericsを用いて1.処理を行う時に呼び出し元から渡す引数の型、2.処理の進捗を表す型、3.処理結果の型を定義します.

具体的な実装は以下のようになります.

 

注意点としては、一度実行したAsyncTaskインスタンスを再実行することはできないので、都度newする必要があります.

 

 

 

ちなみに、android.os.Handlerを用いれば、通常のThreadでもUIに結果を戻すことができます.

 

Leave a Reply

Your email address will not be published. Required fields are marked *