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 스레드의 유저 인터페이스 업데이트 하기
setTranslated(), setRetranslated() 메소드가 외부 스레드에서 불림 -> guiSetText() 메소드가 실행됨. -> 유저 인터페이스 업데이트
- 일반 자바 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); } }); } |
'프로그래밍 > 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 |