[Android] 非同期処理 AsyncTaskの使い方

非同期処理が必要なケースは、メインスレッドでアプリがUIを表示させたり、ユーザーが入力したりしている裏でいろいろと処理をして欲しい場合です。逆にメインスレッドが一時停止したり、カクカク表示になる時は非同期にするということでしょう。

非同期で10秒をカウントして、途中経過を1秒毎に表示させる例です

asynctask01

Android Studio 2.1
Android 6.0

 

sponsored link

AsyncTask

 
余談ですが、syncは同期という意味合いですが、asyncで言う「a」は接頭辞で「not」の意味を持ちます。リスニングでは聞き逃しそうですね。

AsyncTaskはジェネリックな変数を持つクラスです

その変数は3つのメソッドに関連しています

  • doInBackground(Params…)
    • バックグラウンドでの非同期処理、何か重い処理を記述する
    • ここに渡されるパラメータの型は1つめのParams
  • onProgressUpdate(Progress…)
    • 途中経過をメインスレッドで表示する場合
    • doInBackground内でpublishProgressを設定するとメインスレッドから呼ばれ、パラメータの型は2つめのProgress
  • onPostExecute(Result)
    • バックグラウンドでの非同期処理が終了後メインスレッドに結果を返す
    • パラメータは3つめのResult

実際に使った例です。

MainActivity.java

 
非同期処理を行うクラスです。パラメータはintを使いたいのですが、ジェネリックに指定できるのは参照型のみで基本型のintは使えません。それでIntegerでラッパークラスを使用します。

TestTask.java

 
レイアウトです
activity_main.xml

 
関連ページ

  • HttpURLConnection GET 設定
    具体的に重い処理として画像ファイルをダウンロードするケースです
    また、AsyncTaskをよりシンプルで使う方法です。

Reference:
AsyncTask