Androidで非同期処理(AsyncTask)を繰り返す方法を学ぶ
環境
- Windows 7
- AndroidStudio 3.0
何がしたいのか?
AsyncTaskの処理が完了した後に再度AsyncTaskを呼び出す処理を無限ループさせたい。
作成アプリ
githubにあげてみた。これの「Sample_CallBack_Repeat」
https://github.com/sourcekatu/Android_Sample_CallBack
非同期処理のコールバックが呼び出されるたびにカウントが進んでいく。
クリアでカウントを0にする。↓
非同期処理を学んだ課程
サンプルを3つ作成してやり方を学ぶ。
「Sample_CallBack1」でコールバックの方法を学ぶ。
「Sample_CallBack2」でコールバックを受ける場所を変更する方法を学ぶ。
「Sample_CallBack_Repeat」で非同期処理を繰り返す方法を学ぶ。
全サンプル共通の非同期処理の部分。
// AsyncTaskの引数は以下の用途で使用。
// 第一引数:doInBackgroundの引数
// 第二引数:onProgressUpdateの引数
// 第三引数:doInBackgroundの戻り値 and onPostExecuteの引数
public class ASyncTaskTest extends AsyncTask<String, Void, String> {
private CallBackTask mcallbacktask;
// バックグラウンドの処理。ここではTextViewの操作はできない。
@Override
protected String doInBackground(String... strings) {
return strings[0];
}
// doInBackgroundの処理が終了した後に呼ばれる。ここではTextViewの操作はできる。
@Override
protected void onPostExecute(String result) { mcallbacktask.CallBack(result); }
public void setOnCallBack(CallBackTask t_object)
{
mcallbacktask = t_object;
}
// コールバック用のインターフェース定義
interface CallBackTask
{
void CallBack(String result);
}
}
まずはコールバックのやり方を学ぶ。
public class MainActivity extends AppCompatActivity {
TextView tw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tw = (TextView)findViewById(R.id.textView);
// 非同期タスク初期化
ASyncTaskTest ak = new ASyncTaskTest();
// コールバック設定
ak.setOnCallBack(new ASyncTaskTest.CallBackTask() {
@Override
public void CallBack(String result) {
tw.setText(result);
}
});
ak.execute("Sample_Callback1"); // 非同期タスクを実行。
}
}
MainActivityのところにimplements ~を記載すると、
コールバックの処理onCreateの外に出せることを学ぶ。
public class MainActivity extends AppCompatActivity implements ASyncTaskTest.CallBackTask{
TextView tw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tw = (TextView)findViewById(R.id.textView);
// 非同期タスク初期化
ASyncTaskTest ak = new ASyncTaskTest();
// コールバック設定
ak.setOnCallBack(this);
ak.execute("Sample_CallBack2"); // 非同期タスクを実行。
}
@Override
public void CallBack(String result) {
tw.setText(result);
}
}
最後に非同期処理を繰り返す方法を学ぶ。
ついでにボタンを押下した後の処理もonCreateの外に出す方法を学ぶ。
public class MainActivity extends AppCompatActivity implements ASyncTaskTest.CallBackTask, View.OnClickListener {
TextView tw;
ASyncTaskTest ak = new ASyncTaskTest();
Button button;
Integer ii = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tw = (TextView)findViewById(R.id.textView);
button = (Button)findViewById(R.id.button2);
// クリアボタンセット。
button.setOnClickListener(this);
// コールバック設定
ak.setOnCallBack(this);
ak.execute(String.valueOf(ii)); // 非同期タスクを実行。
}
// 非同期タスクのコールバックが呼ばれるたびに処理を行う。
@Override
public void CallBack(String result) {
tw.setText(result);
ii++;
// 再度非同期タスク設定して実行。
ak = new ASyncTaskTest();
ak.setOnCallBack(this);
ak.execute(String.valueOf(ii));
}
@Override
public void onClick(View v) {
ii = 0;
tw.setText(String.valueOf(ii));
}
}
参考
https://qiita.com/a_nishimura/items/1548e02b96bebd0d43e4
http://www.kisse-logs.com/2017/05/31/java-callback/
Author And Source
この問題について(Androidで非同期処理(AsyncTask)を繰り返す方法を学ぶ), 我々は、より多くの情報をここで見つけました https://qiita.com/sourcekatu/items/6487406ad2e1c53766f8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .