2011년 5월 25일 수요일

Android Thread 내에서 UI 핸들링

별거 아니지만 모르고 있으면 큰 낭패를 당하는 내용입니다.

아래의 Code는 Exception이 발생합니다.

public class BuggingService extends Service {
private Timer timer;
private int counter;
private TimerTask executeAgain = new TimerTask() {

@Override
public void run() {
Toast.makeText(getApplicationContext(), "I poop on you", Toast.LENGTH_LONG).show();
}
};

Android에서는 Thread내에서는 UI이 변경을 직접적으로 하지 못하게 되어 있습니다. 위의 Code에서 Toast는 UI 요소이기 때문에 Exception이 발생하게 되는 것입니다.

해결 방법은 두 가지가 있습니다.
  1. Activity에서 Thread을 호출한다면? “runOnuiThread” Method를 이용합니다.
  2. 대부분은 “Handler.post” 방식을 이용합니다.

runOnuiThread 방식 예
activity.runOnUiThread(new Runnable() {
   public void run() {
       Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
   }
});

Handler.post 방식 예
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
while (isInboxThreadRunning) {
handler.post(new Runnable() {
         public void run() {
             Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
         }
     });
SystemClock.sleep(1 * 60 * 1000);
}
}
}).start();

댓글 1개:

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...