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

소켓 통신 스레드 -> 액티비티 뿌려주기

0 추천

안녕하세요 안드로이드 공부중인 학생입니다.

지금 컴퓨터 서버와 안드로이드 소켓통신 어플리케이션을 구현했습니다. 

( 온도, 습도 등을 나타내고 기기를 제어하는 프로그램)

프로그램이 돌아가는데 큰 지장은 없지만 좀 더 알고 싶어서 질문 드립니다.

 

제가 구현한 통신소스의 구조가 소켓연결시 ClientThread로 데이터를 지속적으로 받습니다.

그리고 받은 데이터를 MainActivity의 static 변수에 저장한 다음 각각 클래스-액티비티에서 스레드를 돌려서 매 5초마다 MainActivity의 static 변수들을 가져다가 최신화해주는데 이게 정상적인 구조인가요? 

아시기 쉽게 그림으로 그려봤는데 여기서 str1, str2, str3는 중복될 일이 없구요. 

글을 잘 못썼는데, 요점은 통신으로 받아온 데이터를 어떤 방법으로 각각의 액티비티에 뿌려주는 것이 효율적인지가 궁금합니다.

민민 (130 포인트) 님이 2017년 2월 7일 질문

2개의 답변

+1 추천
만약 일반 윈도우 PC 어플리케이션이라면 여러개의 화면을 띄울수 있으니 생각할 수 있는 이슈이지만

안드로이드 Activity는 사용자 입장에서는 1개만 활성되어 있게 됩니다.

통신 결과 데이터를 전역으로 가지고 있고

각 Activity 생명주기에 맞춰서 가져다가 쓴다고 보는 개념이 맞을것 같습니다.

전역변수는 static을 사용하셔도 좋지만 일반적으로 Application 객체를 사용합니다.
Development Guy (70,570 포인트) 님이 2017년 2월 7일 답변
아 Application 객체를 몰랐는데 찾아보니 알겠습니다. 감사합니다~
네 개념상 그렇지요. 근데 제가 Application 객체 사용하라고 한거는 방법중 하나이고 전역변수 역할로 사용할 수 있는 좋은 방법 있으면 그것도 상관은 없습니다.
0 추천
서비스를 통해 통신을 하고..

그 결과를 핸들러나 브로드캐스트로 처리하세요.

액티비티마다 핸들러 또는 리시버로 받아 UI에 보여주면 되니 문제 없어보이네요.
개발자초심 (21,220 포인트) 님이 2017년 2월 7일 답변
처음에 자바가 많이 부족한 상태에서 시작해서 다른 클래스에서 핸들러를 부르는게 어려워서 static변수를 쓴거였는데, 다시 해봐야겠네요ㅋㅋ
서비스를 통해서 통신하는 건 처음 들었는데 참고할게요!!
...