java.util.concurrent 패키지
- 일반 자바 Thread 클래스보다 높은 수준의 동시성 프로그래밍을 지원한다...고 함.
- ExecutorService 클래스는 하나 이상의 스레드를 관리하며, 작업(Runnable이나 Callable 인스턴스)이 실행되도록 실행기(ExecutorService 인스턴스)에 넘겨주면 된다.
  그러면 Future 클래스의 인스턴스를 반환되는데, 이 Future클래스는 실행시킨 작업이 반환할, 아직 알 수 없는 값을 참조한다.
 (1) transThread = Executors.newSingleThreadExecutor(); // 실행기 얻기
 (2) transPending = transThread.submit(translateTask); // ExecutorService에 작업(translateTask 쓰레드)를 넘기고 결과를 Future(transPending)로 받음.

외부 스레드에서 Android GUI 스레드의 유저 인터페이스 업데이트 하기
   /**
     * 화면의 텍스트 수정하기(다른 스레드에서 호출됨)
     * @param text
     */
    public void setTranslated(String text) {

        guiSetText(transText, text);
    }

    /**
     * 화면의 텍스트 수정하기(다른 스레드에서 호출됨)
     * @param text
     */
    public void setRetranslated(String text) {

        guiSetText(retransText, text);
    }

   /**
     * GUI 관련한 변경은 모두 GUI스레드에서 이루어져야 한다.<br>
     * 외부 스레드(유저 인터페이스가 아닌)에서 유저 인터페이스 관련 함수를 호출할 수 없음. 외부 스레드에서 GUI스레드에게 유저 인터페이스를 업데이트하라고 요청.
     * @param view
     * @param text
     */
    private void guiSetText(final TextView view, final String text) {

        guiThread.post(new Runnable() {

            @Override
            public void run() {

                view.setText(text);
            }
        });
    }
setTranslated(), setRetranslated() 메소드가 외부 스레드에서 불림 -> guiSetText() 메소드가 실행됨. -> 유저 인터페이스 업데이트

'프로그래밍 > Android' 카테고리의 다른 글

[TDD] 안드로이드 TDD 개발하기  (0) 2010.11.15
[Hello,Android] Android <-> WebView 간 호출하기  (1) 2010.08.31
[Hello,World] Sudoku  (0) 2010.08.31
[Hello,Android] Audio, Video  (0) 2010.08.30
[tip] LogCat 문자깨짐  (0) 2010.08.18