안드로이드
asynctask 설명
단딴단
2016. 7. 7. 18:01
반응형
AsyncTask<Params, Progress, Result>
총 3개의 제네릭스를 받는다.
비동기 작업에서 사용하는 세 가지 유형이 다음과 같다.
Params - 파라미터 타입은 작업 실행 시에 송신.
(doInBackground 파라미터 타입이 되며, execute 메소드 인자 값이 된다.)
Progress - doInBackground 작업 시 진행 단위의 타입.
(onProgressUpdate 파라미터 타입)
Result - doInBackground 리턴값.
(onPostExecute 파라미터 타입)
void onPreExecute()
doInBackground 시작 전에 호출되어 UI 스레드에서 실행된다. 주로 로딩바나 Progress 같은 동작 중임을 알리는 작업을 작성한다.
Result doInBackground(Params... prams)
실제 스레드 작업을 작성하는 곳이며 execute에서 전달한 params 인수를 사용할 수 있다.
void onProgressUpdate(Progress... values)
publishProgress()를 통해 호출되며 UI 스레드에서 실행된다. 파일 내려받는다고 치면 그때 퍼센티지 표시 작업 같은 걸 작성한다.
void onPostExecute(Result result)
doInBackground 작업의 리턴값을 파라미터로 받으며 작업이 끝났음을 알리는 작업을 작성한다.
private class DownloadFilesTask extends AsyncTask수행부{ @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { // 내려받는 파일 size 합산 작업 // totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100)); // Escape early if cancel() is called if (isCancelled()) break; } return totalSize; } @Override protected void onProgressUpdate(Integer... progress) { // 파일 다운로드 퍼센티지 표시 작업 // setProgressPercent(progress[0]); } @Override protected void onPostExecute(Long result) { // 다 받아진 후 받은 파일 총용량 표시 작업 // showDialog("Downloaded " + result + " bytes"); } @Override protected void onCancelled(Long aLong) { super.onCancelled(aLong); } @Override protected void onCancelled() { super.onCancelled(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }
try { new DownloadFilesTask().execute(new URL("파일 다운로드 경로1"), new URL("파일 다운로드 경로2")); } catch (MalformedURLException e) { e.printStackTrace(); }
반응형