android AsyncTaskの使い方
あまりちゃんと理解してこなかったので自分なりに使い方理解するためのサンプルコードをメモしておく
結果
D/: ##### onPreExecute D/: ##### doInBackground value1 value2 D/: ##### onProgressUpdate 1秒後に呼ばれる D/: ##### onProgressUpdate 2秒後に呼ばれる D/: ##### onProgressUpdate 3秒後に呼ばれる D/: ##### onPostExecute 結果 value1:value2
ソース
package xxx.yyy.zzz
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyTask task = new MyTask();
task.execute("value1", "value2");
}
// パラメータ1 : doInBackgroundに渡す
// パラメータ2 : onProgressUpdateに渡す
// パラメータ3 : onPostExecuteに渡す
class MyTask extends AsyncTask<String, Integer, String> {
@Override
// 最初に呼ばれる(任意)
protected void onPreExecute() {
Log.d("","##### onPreExecute");
}
@Override
// onPreExecuteの後に呼ばれる(必須)
protected String doInBackground(String... argv) {
Log.d("",String.format("##### doInBackground %s %s", argv[0], argv[1]));
try {
Thread.sleep(1000);
publishProgress(1);
Thread.sleep(1000);
publishProgress(2);
Thread.sleep(1000);
publishProgress(3);
// cancel(true);
} catch (InterruptedException e) {
}
return argv[0] + ":" + argv[1];
}
@Override
// publishProgressで呼ばれる(任意)
protected void onProgressUpdate(Integer... progress) {
Log.d("", String.format("##### onProgressUpdate %d秒後に呼ばれる", progress[0]));
}
@Override
// doInBackgroundが完了したら呼ばれる(任意)
protected void onPostExecute(String result) {
Log.d("", String.format("##### onPostExecute 結果 %s", result));
}
@Override
// cancelで呼ばれる(任意)
protected void onCancelled() {
Log.d("","##### onCancelled");
}
}
}以上