Akashic Records

Android Thread 내에서 UI 핸들링 본문

오래된글/Articles

Android Thread 내에서 UI 핸들링

Andrew's Akashic Records 2018. 4. 19. 15:01
728x90

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


아래의 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();



728x90

'오래된글 > Articles' 카테고리의 다른 글

Getting all EJB home interface object from a HashMap  (0) 2018.04.19
안정성 패턴  (0) 2018.04.19
Java VM Core Dump 분석  (0) 2018.04.19
Java Memory Model  (0) 2018.04.19
Capacity Patterns(용량 패턴)  (0) 2018.04.19
Comments