AsyncTask
AsyncTaskクラスは抽象クラスであり、Androidに必要なメインスレッドとワークスレッドの分離構造を実現するのに役立ちます.
AndroidのAsyncTaskライフサイクル管理は、5つのライフサイクル関数を再定義することで管理できます.
因子は第3のクラスとして定義され、 Params, Progressと Result .
onPreExecute:UI Threadで実行され、Progress Barを解放すると になります. doInBackground Background thread on PreExecute()を呼び出し、 を呼び出します. onProgressUpdate UI Threadで実行し、publishProgress(Progress...)を呼び出すと実行します.主にProgress Bar更新に使用されます. は、PostExecute UI Thread上で実行されます.すべてのバックグラウンドタスクは、終了後に呼び出されます.
可変因子は0以上の因子を許容できることを示す.
TaskがキャンセルされたときにTaskがキャンセルをできるだけ早く処理するようにするには、次の手順に従います. ISCanceled()をdoInBackground関数で定期的にチェックする必要があります.
Android Developerの正式なドキュメントには、次のものが含まれています.
さらに、AsyncTaskの作成、ロード、および実行()関数呼び出しは、UI Thread上で実行する必要があります.
taskの実行は、1回だけ呼び出す必要があることを示す.
AsyncTask主要再定義関数
AndroidのAsyncTaskライフサイクル管理は、5つのライフサイクル関数を再定義することで管理できます.
因子は第3のクラスとして定義され、 Params, Progressと Result .
ステップを4つのステップとして定義
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
// -------------------------------------------------------------------------------
new DownloadFilesTask().execute(url1, url2, url3);
可変パラメータ(varargs)
可変因子は0以上の因子を許容できることを示す.
thisIsFunction(); // 가능
thisIsFunction("arg1"); //가능
thisIsFunction("arg1", "arg2", "arg3"); //가능
thisIsFunction(new String[]{"arg1", "arg2", "arg3"}); //가능
/*
인자를 omit 하여도 성립하고, 1개 이상의 인자를 넘겨주거나,
배열 형태로 넘겨 줄 수 있다. 하지만, 여기서 주의해야 할 점은,
인자를 1개만 넘겨주어도 배열의 형태로 다뤄줘야 한다는 점
*/
// doInBackground 함수로 돌아가서, urls를 1개만 넘겨주었더라도,
protected Long doInBackground(URL... urls) {
long totalSize = Downloader.downloadFile(urls[0]);
return totalSize;
}
/*배열로 처리해주어야만 한다.
또한, varargs를 다른 parameter와 동시에 넘겨줄 경우
varargs는 항상 나중에 자리해야만 한다.
*/
// -------------------------------------------------------------------------------
thisIsFunction(int n, String... strings) // 가능
thisIsFunction(String... strings, int n) // Error
AsyncTaskのキャンセル
///AsyncTask는 cancel(boolean)을 통해 취소할 수 있다.
downloadTask.cancel(true);
AsyncTaskがキャンセルされた場合、onPostExecute(オブジェクト)は呼び出されず、doInBackground(オブジェクト[])が戻った時点でonCanceled(オブジェクト)が呼び出されます.TaskがキャンセルされたときにTaskがキャンセルをできるだけ早く処理するようにするには、次の手順に従います. ISCanceled()をdoInBackground関数で定期的にチェックする必要があります.
その他の注意事項
Android Developerの正式なドキュメントには、次のものが含まれています.
onPreExecute()
onPostExecute(Result)
doInBackground(Params...)
onProgressUpdate(Progress...)
動作を表す 明示的に呼ぶな.さらに、AsyncTaskの作成、ロード、および実行()関数呼び出しは、UI Thread上で実行する必要があります.
taskの実行は、1回だけ呼び出す必要があることを示す.
Reference
この問題について(AsyncTask), 我々は、より多くの情報をここで見つけました https://velog.io/@ha_jni/AsyncTaskテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol