프로그래밍/Android

[Hello,Android] Thread와 google API 를 사용한 동시번역

galad 2010. 8. 31. 00:28
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() 메소드가 실행됨. -> 유저 인터페이스 업데이트