본문 바로가기

안드로이드

asynctask 설명

반응형

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();
                }


반응형

'안드로이드' 카테고리의 다른 글

안드로이드 Asynctask 설명  (0) 2016.09.27
Textview 부분 볼드, 색 적용하기  (0) 2016.07.07
Context란  (0) 2016.07.07
px, dpi,dp 요약  (0) 2016.04.18
안드로이드 딜레이 쉽게 구현  (0) 2016.03.29