투케이2K

12. (AndroidStudio/android/java) AsyncTask 비동기 작업을 사용해서 실시간 카운트 실시 본문

Android

12. (AndroidStudio/android/java) AsyncTask 비동기 작업을 사용해서 실시간 카운트 실시

투케이2K 2021. 1. 21. 08:25
반응형

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

/* =========================== */

/* =========================== */

[소스 코드]

 

// ==== [호출 방법1] ====
new A_Task().execute();


// ==== [호출 방법2] ====
A_Task a_task = new A_Task();
a_task.execute();


// ==== [AsyncTask 클래스 생성] ====
private class A_Task extends AsyncTask<Void, Integer, Void> {
        /** 
          [AsyncTask 비동기 작업 실행 순서]
          1. 순서 - onPreExecute() -> doInBackground() -> onProgressUpdate() -> onPostExecute()
          2. 파라미터 정의 <Integer, Integer, Void> - <doInBackground, onProgressUpdate, onPostExecute>
          3. Void ... params - 동일한 파라미터를 여러개 받을 때, 자동으로 배열처리한다는 의미입니다
        */

        // ==== [내부 변수 선언 부분] ====
        int count = 1;

        // ==== [비동기 작업 실행 부분] ====
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            /** 
              1. doInBackground 메소드가 실행되기 전에 실행되는 메소드입니다
              2. 비동기 처리전에 무엇인가 처리를 하고 싶다면 사용하면 됩니다
            */
            
            // ==== [작업 실행 변수값 설정 및 초기화] ====                        
            Toast.makeText(A_Main.this, "비동기 작업을 실행합니다", Toast.LENGTH_SHORT).show();            
        }

        @Override
        protected Void doInBackground(Void ... params) {
            /**
              1. 비동기 작업에서 최종 처리하고 싶은 내용을 작성합니다
              2. 실시간 진행 상황을 확인하고 싶을 경우 onProgressUpdate() 메소드를 호출해서 확인할 수 있습니다
              3. 모든 작업이 처리되면 onPostExecute() 메소드가 호출됩니다
            */

            // ==== [실행할 작업 내용 작성] ====
            while(count<=10){
                count += 1; //카운트 값을 증가시킵니다
                publishProgress(progress_status); //비동기에서 onProgressUpdate() 메소드를 호출합니다
                SystemClock.sleep(300);
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Integer ... values) {
            super.onProgressUpdate(values);
            /**
              1. 비동기 처리의 진행 상황을 실시간으로 확인하고 싶을 때 사용하면 됩니다
              2. 백그라운드에 호출되는 경우 처리됩니다
            */

            // ==== [실시간 표시 내용 작성] ====  
            Toast.makeText(A_Main.this, "카운트 : "+String.valueOf(values[0]), Toast.LENGTH_SHORT).show();          
        }

        @Override
        protected void onPostExecute(Void result) {            
            super.onPostExecute(result);
            /** 
              1. doInBackground 메소드 후에 실행되는 메소드입니다
              2. 최종 작업이 완료된 경우 수행이 됩니다
            */

            // ==== [작업 완료 후 수행될 내용 작성] ====
            Toast.makeText(MainActivity.this, "비동기 작업이 종료되었습니다", Toast.LENGTH_SHORT).show();
        }

    }//AysnTask 스레드 클래스 종료

/* =========================== */

/* =========================== */

[요약 설명]

* 1. 순서 - onPreExecute() -> doInBackground() -> onProgressUpdate() -> onPostExecute()

* 2. 파라미터 정의 <Integer, Integer, Void> - <doInBackground, onProgressUpdate, onPostExecute>

* 3. Void ... params - 동일한 파라미터를 여러개 받을 때, 자동으로 배열처리한다는 의미입니다

/* =========================== */

반응형
Comments