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

서비스와 액티비티 간 통신 문제

0 추천
소켓 프로그래밍을 하고 있습니다.

특정 데이터를 받으면, 메인액티비티의 UI를 변경시키기 위해 스레드와 핸들러를 사용하고 있습니다.

근데 이게 화면이 꺼지거나 다른 앱을 실행시키면 스레드가 작동을 안하는 것 같습니다.

UI도 안바뀌고, 데이터 입출력도 하지 않는 것같고, 스레드도 작동하지 않는것 같습니다.

아무래도 서비스 내에 소켓 스레드를 만들어서 그걸로 입력을 해야할 것 같은데

 

1. 화면이 꺼지거나 다른 프로그램을 실행시켜도 메인액티비티와 스레드가 정지하지 않게 할 수 있을까요?

 

2. 만약 1번이 안된다면 서비스를 사용해서 데이터를 받아야 할텐데

전혀 다른 클래스에 있는 서비스가 액티비티의 UI변경 메소드를 실행시킬 방법이 있을까요?

아무래도 서비스에서 static void mClass.method(Object data) 이렇게 강제로 기입해도 영역문제를 초래할 것 같고,

메인 액티비티와 스레드가 정지된 상태인데 UI변경 메소드를 제대로 실행시키고 또 반영시킬 수 있을지도 의문입니다.

카카오톡에도 톡이 오면 그걸 당장 확인하지 않아도 자동으로 내용들이 바뀌어져 있잖아요.

그런걸 어떻게 구현할까요?

 

3. 이건 앞과는 관련이 없는 문제인데

프로그램을 백키를 눌러 종료를 시키면, "프로그램이 중지되었습니다"라는 이상한 문구가 뜨면서 종료가 됩니다.

아무래도 저 문구는 널포인트를 잡거나 할때 등 예외로 인해 강제종료될때 뜨는 말 같은데,

다 끝나고 종료시키려는 마당에 뜨네요. 그렇다고해서 무언가 남기고 종료되는 것도 아닙니다. 다시켜보면 잘 됩니다.

onDestroy()에 스레드.인터럽트, 소켓.클로즈, 와이파이락.릴리즈, 모두 널값 넣고 system.gc() 돌려도 똑같습니다.
ifreeta (260 포인트) 님이 2013년 11월 6일 질문
ifreeta님이 2013년 11월 6일 수정

1개의 답변

0 추천
1. 서비스 쓰세요

2. 서비스쓰심잘됩니다

3. 그건 스레드가 끝나고 UI 갱신했는데 이미 액티비티를 빠져나가서 갱신할게 없어서 에러나는거게죠.

그리고 에러났으면 오류로그를 첨부하시고요 에러난다고 로그 파악안하고 이것저것 의심되는거 다 넣는다고 해결안됩니다
건방진프로그래머 (26,630 포인트) 님이 2013년 11월 6일 답변
감사합니다.
1,2번이 덕분에 해결이 되었습니다.
근데 서비스에서 소켓을 돌리는데 화면이 꺼지면 socket.recv() 메소드가 동작을 하지 않습니다. 서비스면 계속 recv를 해야하는 걸로 알고있는데 잘 안되는 것 같습니다. 혹시 이유를 아시나요?
...