android 非同期通信

どうも、久しぶりになります。kishidaです。
androidの非同期通信を行うためのクラスであるAsyncTaskについて書こうと思います

AsyncTask<Params, Progress, Result>
主なメソッド
protected void onPreExecute()
protected abstract Result doInBackground(Params… params)
void onProgressUpdate(Progress… values)
protected void onPostExecute(Result result)
protected void onCancelled()

サンプルプログラム
main.xml



    


MainActivity.java

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
  Task task;
  View main;
  TextView textView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    main = inflater.inflate(R.layout.main, null);
    textView = (TextView)main.findViewById(R.id.msg);

    AsyncTask task = new AsyncTask(){
    //はじめに動作する
    @Override
    protected void onPreExecute(){
      textView.setText("start");
   }
    //必須メソッド、非同期処理をする
    @Override
        protected String doInBackground(Object... args) {
            /****************処理**********************/
            onProgressUpdate();
            /*
            //非同期処理をキャンセルする(isCancelled()がtrueになる)
            cancel(true);
            // cancel
            if (isCancelled()) {
                // 処理を終了する
                return null;
            }
            */
            return null;
        }

    //doInBackgroundの処理に合わせてUIを動かしたい時とかに使う
    @Override
    protected void onProgressUpdate(Integer... args){
        textView.setText("run");
    }
    //doInBackground終了後呼び出し
      @Override
      protected void onPostExecute(String result){
          textView.setText("end");
      }
     //doInBackgroundキャンセル終了時に呼び出される
      @Override
      protected void onCancelled(){
          textView.setText("cancel");
      }
    };
    //非同期処理開始
    task.execute();
    setContentView(main);
}

非同期処理で画面に start->(run)->end の順に表示するプログラム。時間のかかる処理をしてないのでrunは見えませんが。
非同期処理中にUIを変更したいときはonProgressUpdateを使う。
doInBackgroundの戻り値はonPostExecuteの引数になります。
onCancelled()はcancel(true)のタイミングで呼び出されます。

まとめると
execute() //呼び出し

onPreExecute() //非同期処理の前に実行

doInBackground(){ //非同期処理開始
/********処理中*********/
処理中に描画を反映させたいなど  → onProgressUpdate() //非同期処理中に実行
非同期処理を中断 cancel(true) が呼び出された → onCancelled() //非同期処理中に実行 
/********処理中*********/
}

onPostExecute() //非同期処理の後に実行

こんなかんじで動いています

カテゴリー: Android

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*