2019년 7월 3일 수요일

안드로이드 서비스의 스레드 안에서 토스트 띄우기

안드로이드 서비스의 스레드 안에서 토스트를 띄워야할 상황이 있다.
하지만 토스트함수의 직접호출이 안되고
서비스 내에는 runOnUiThread() 도 사용 불가하기 때문에 다음과 같이 대체함수를 만들어 호출한다.


1. 서비스 클래스 안에서 멤버 변수 선언
Handler handler;    // for toast UI


2. OnCreate() 내부에서 초기화
handler = new Handler();

3. 함수 추가
private void _runOnUiThread(Runnable runnable) {
    handler.post(runnable);
}


4. 우리가 원하는 토스트 띄우기
  (3.에서 선언한 함수를 불러오기)
_runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(getApplicationContext(),
                       "TOAST MESSAGE TEXT",
                       Toast.LENGTH_LONG).show();
   }
});