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

서브스레드에서 화면전환이 가능할까요?

0 추천

안녕하세요 개발자여러분! 초보개발자입니다.

코딩을 하다 어려운 점이 생겨 고수님들의 도움을 받고자 질문드립니다.

간단한 문제일 수도 있지만 저에겐 생소하고 어려운일이니 천천히 설명 부탁드립니다.

내용은 아래에 있습니다.

 

메인스레드와는 별개인 서브스레드를 만들어 화면전환을 할 수 있을까요?

서비스에서 외부 서버와 소켓을 통하여 연결하게됩니다. 메인스레드에서 서비스와 바인드하였고,

서브 스레드에서 [바인드한 서비스의 소켓 연결]을 확인하여 결과에 따라 다른 액티비티로 전환하는 기능입니다.

 

메인스레드에서 서비스에 바인드하고,이어서 다른 작업을 바로 하려니 바인드가 되지 않더라구요.

서비스 바인드 이후의 작업을 서브스레드에서 수행중인 상황입니다.

(while문을 반복적으로 돌려 1.바인드 되었는지, 2.소켓이 연결되었는지 등의 지연이 생기는 상황에 따른 결과를 기다립니다. 지연을 기다리며 while문을 사용하니 메인스레드가 멈춰버리더군요. 메인 스레드가 끝까지 돌아야 onServiceConnected 메서드가 호출되는데 원래 이런가요??)

(만약 이 이유를 아시는 개발자님이 계신다면 이부분도 설명이 가능할까요??)

 

고수님들의 귀한 재능을 나누어주시길 바랍니다! 감사합니다!

smartdevel (570 포인트) 님이 2018년 8월 2일 질문

1개의 답변

+1 추천
 
채택된 답변
안녕하세요..

소켓 통신으로 화면 전환 패킷을 받으면 화면전환한다고 가정을 하면, 저는 이렇게 구현하겠습니다.

Application, MainActivity, MainService의 3개 클래스가 필요하고, Application은 MainActivity를 가지고 있고, Application 클래스에 메서드를 선언하고, MainActivity에서 MainService를 실행하고, MainService에서 이벤트를 받으면.. Application의 메서스를 호출해서 MainActivity의 화면을 회전시킨다..

그리고, Service도 메인 스레드에서 동작하기 때문에.. 소켓서버나 클라이언트를 실행히키려면 스레드를 사용해야 합니다.

즐코딩 하세요. ^^
mcsong (44,040 포인트) 님이 2018년 8월 2일 답변
smartdevel님이 2018년 8월 6일 채택됨
...