마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서비스의 스레드에서 다른 액티비티의 UI를 변경하려고 합니다.

0 추천
백그라운드에서 서비스를 동작시키면서 스레드로 카운트를 세고 있구요 다른 액티비티의 UI를 변경 하기 위해 메인 핸들러에 메시지를 보내려고 하고 있는데요 코드상에 어떤식으로 작성해야 되는지 난감합니다...

---------------------------------------------------------------------------------- 백그라운드 동작 서비스 입니다.

public class CallTimeCount extends Service implements Runnable {

public void run() {

  while (isRun) {
   count++;
   Log.w("TAG","run()>>> count : " + count);
   
   if(NoteDuringCall.isActive){
    Log.w("TAG","count : " + count);
    Message message = note.nHandler.obtainMessage(0); //이부분에서 다른 액티비티의 핸들러에 메시지를 보내는데요
    message.arg1 = count;
    note.nHandler.sendMessage(message);
   }
   
   try {
    Thread.sleep(1000);
   } catch (Exception e) {
    Log.w("TAG", e.getMessage());
   }
  }
 }

----------------------------------------------------------------------------------

public class NoteDuringCall extends Activity {

NHandler nHandler;

// 메시지를 받을 핸들러입니다. 이곳에 선언한 이유는 메인 UI를 변경하기 위해서 였는데요 현재 상태에서는 null이 나구요 그러는게 당연한데 저걸 null이  안나게 할수 있는 방법을 찾고있습니다.. 이곳에서 핸들러 자체를 생성해버리면 아래쪽의 callTimeCount 를 찾을수 없어서 애러가 납니다.

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

...............

callTimeCount = (TextView) findViewById(R.id.callTimeCount);

// 변경시킬 UI입니다. 단순히 서비스에서 세고 있는 카운트를 보여주기 위한코드입니다.

 nHandler = new NHandler();

class NHandler extends Handler { //내부클래스로 핸들러를 구현했습니다.
  
  @Override
  public void handleMessage(Message msg) {
   switch (msg.what) {
   case 0:
    String count = Integer.toString(msg.arg1);
    callTimeCount.setText(count);
    break;
   }
  }
 }

}
inpee (140 포인트) 님이 2014년 5월 13일 질문

1개의 답변

+1 추천
aucd29 (218,390 포인트) 님이 2014년 5월 13일 답변
...