android 의 AsyncTask

3441 단어 AsyncTask
AsyncTask 와 Handler 비교
1)AsyncTask 실현 의 원리 와 적용 의 장단 점
AsyncTask 는 안 드 로 이 드 가 제공 하 는 경량급 비동기 류 로 AsyncTask 를 직접 계승 하여 클래스 에서 비동기 작업 을 실현 하고 인터페이스 가 현재 비동기 실행 정 도 를 피드백 합 니 다(인 터 페 이 스 를 통 해 UI 진도 업 데 이 트 를 실현 할 수 있 습 니 다).마지막 으로 실 행 된 결 과 를 UI 메 인 스 레 드 에 피드백 합 니 다.
사용 한 장점:
l  간단 하 다
l  프로 세 스 제어 가능
사용 한 단점:
l  여러 개의 비동기 조작 과 Ui 변경 이 필요 할 때 복잡 해진 다.
2)Handler 비동기 실현 의 원리 와 적용 의 장단 점
Handler 비동기 가 실 현 될 때 Handler,Looper,Message,Thread 네 개의 대상 과 관련 되 고 비동기 화 를 실현 하 는 절 차 는 주 스 레 드 가 Thread(하위 스 레 드)à thread(하위 스 레 드)를 실행 하고 Message-à Looper 를 생 성하 여 Message 를 가 져 와 Handler à Handler 에 게 Looper 중의 Message 를 하나씩 가 져 와 UI 변경 을 하 는 것 입 니 다.
사용 한 장점:
l  구조 가 뚜렷 하고 기능 정의 가 명확 하 다.
l  여러 백 스테이지 임무 에 대해 간단 하고 뚜렷 하 다.
사용 한 단점:
l  단일 배경 비동기 처리 시 코드 가 너무 많 고 구조 가 너무 복잡 해 보인다(상대 성)
AsyncTask 소개
Android 의 AsyncTask 는 Handler 보다 경량급 으로 간단 한 비동기 처리 에 적 용 됩 니 다.
먼저 안 드 로 이 드 가 Handler 와 AsyncTask 가 있 는 이 유 는 모두 메 인 스 레 드(UI 스 레 드)를 막 지 않 기 위해 서 이 며,UI 의 업 데 이 트 는 메 인 스 레 드 에서 만 이 루어 질 수 있 기 때문에 비동기 처리 가 불가피 하 다.
Android 는 이 개발 난이 도 를 낮 추기 위해 AsyncTask 를 제공 합 니 다.AsyncTask 는 봉 인 된 백 스테이지 퀘 스 트 클래스 로 말 그대로 비동기 퀘 스 트 입 니 다.
AsyncTask 는 Object 류 에 직접 계승 되 며,위 치 는 android.os.AsyncTask 입 니 다.AsyncTask 작업 을 사용 하려 면 세 개의 일반적인 인 자 를 제공 하고 몇 가지 방법 을 다시 불 러 와 야 합 니 다(적어도 하 나 를 다시 불 러 옵 니 다).
AsyncTask 는 세 가지 일반적인 유형 인 Params,Progress,Result 를 정의 합 니 다.
  • Params 가 작업 을 시작 할 때 수행 하 는 입력 인자,예 를 들 어 HTTP 가 요청 한 URL
  • Progress 배경 작업 수행 의 백분율.
  • Result 배경 에서 임 무 를 수행 하고 최종 적 으로 돌아 온 결과,예 를 들 어 String.

  • AsyncTask 를 사용 한 학생 들 은 비동기 로 데 이 터 를 불 러 오 는 데 최소한 다음 과 같은 두 가지 방법 을 다시 써 야 한 다 는 것 을 알 고 있 습 니 다.
  • doInBackground(Params...)배경 에서 실행 되 며 시간 이 걸 리 는 작업 은 모두 여기에 놓 을 수 있 습 니 다.여기 서 UI 를 직접 조작 할 수 없 음 을 주의 하 세 요.이 방법 은 배경 스 레 드 에서 실행 되 고 임무 의 주요 업 무 를 완성 하 는 데 시간 이 오래 걸린다.실행 과정 에서 publicProgress(Progress...)를 호출 하여 작업 의 진 도 를 업데이트 할 수 있 습 니 다
  • onPostExecute(Result)  Handler 가 UI 를 처리 하 는 방식 에 해당 하 며,여기 서 doInBackground 에서 얻 은 결과 처리 조작 UI 를 사용 할 수 있 습 니 다.이 방법 은 메 인 스 레 드 에서 실 행 됩 니 다.작업 수행 결 과 는 이 방법의 매개 변수 로 되 돌아 갑 니 다
  • 필요 하 다 면 이 세 가지 방법 을 다시 써 야 하지만 꼭 필요 한 것 은 아니다.
  • onProgressUpdate(Progress…)   진도 바 를 사용 하여 사용자 체험 도 를 증가 시 킬 수 있 습 니 다.이 방법 은 주 스 레 드 에서 실 행 됩 니 다.작업 수행 진 도 를 표시 하 는 데 사 용 됩 니 다
  • onPreExecute()        이것 은 최종 사용자 가 excute 를 호출 할 때의 인터페이스 입 니 다.작업 이 실행 되 기 전에 이 방법 을 호출 하면 진행 대화 상 자 를 표시 할 수 있 습 니 다
  • onCancelled()             사용자 호출 취소 시 할 작업
  • AsyncTask 류 를 사용 합 니 다.다음은 몇 가지 지 켜 야 할 준칙 입 니 다.
  • Task 의 인 스 턴 스 는 UI thread 에서 만들어 야 합 니 다
  • execute 방법 은 UI thread 에서 호출 되 어야 합 니 다
  • onPreExecute(),onPostExecute(Result),doInBackground(Params...),onProgressUpdate(Progress...)를 수 동 으로 호출 하지 마 십시오

  • 4.567917.이 task 는 한 번 만 실 행 될 수 있 습 니 다.그렇지 않 으 면 여러 번 호출 할 때 이상 이 발생 할 수 있 습 니 다
    간단 한 예시
    new AsyncTask<Void, Void, Void>() {
        //              
        protected Void doInBackground(Void... params)
        {
            try 
            {
                Thread.sleep(1000);
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            }
            data.add("new item");
            return null;
        }
        //        listview      
        @Override
        protected void onPostExecute(Void result) 
        {
            adapter.notifyDataSetChanged();
            listView.onRefreshComplete();
        }
    
    }.execute(null);

    좋은 웹페이지 즐겨찾기