안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요,
넥서스S(서버)와 아트릭스(클라이언트)를 이용해서 실시간 이미지 스트리밍을 하고 있습니다.
구현은 완성되었지만, 가끔씩 딜레이가 발생해서 영상이 느려지는 현상이 발생하더군요.
로그캣을 찍어보니 다음과 같은 메시지가 뜰 때 딜레이가 발생한다는 것을 확인하였습니다.
03-23 09:19:58.723: D/dalvikvm(4012): JIT unchain all for threadid=10
03-23 09:19:58.753: D/dalvikvm(4012): GC_EXTERNAL_ALLOC freed 428K, 51% free 2779K/5639K, external 3075K/3098K, paused 18ms
일단 제가 만들고 있는 앱에서 조절할 수 있는 문제는 아닌 것 같은데요,
인터넷을 아무리 검색해봐도 해결책을 찾을 수가 없습니다..ㅠㅜㅠㅜ
고수님들의 충고 부탁드립니다.
감사합니다! (__)
2012.05.03 13:40:28
저 같은 경우는
무분별한 동기화 처리로 인해서 그런 현상이 발생하였습니다.
스레드가 접근해야 할 타이밍에 접근 못해서 그러는 것이 아닐까 생각합니다...
저도 위와 같은 문제로 삽질을 꽤나 했는데
결론은 Main 스레드, 기타 네이티브로 생성, 실행되는 스레드의 스케쥴을 관리 해줘야 한다는 점입니다..
메소드 동기화는 절대 답이 아니고 부분적인 동기화 작업을 최소화 하는게 맞다고 생각합니다.
리소스를 다량 공유하는 메소드에 동기화 처리를 과다하게 할 경우
자기도 의도하지 않게 버벅거리는 현상이 발견될 수 있다고 생각합니다.
해도해도 어렵네요 프로그래밍은..




자답...?은 아니지만 해결은 했습니다ㅋㅋㅋ
위의 로그캣에서 thread ID 10번이 무슨 쓰레드일까 싶어서 다음과 같은 코드를 각 쓰레드에 넣어서 몇번인지 파악해보려 했는데,,
Log.d("image_receiver","Thread ID : " + Thread.currentThread().getId());
딜레이가 해결되어 버리네요...-_-..
로그캣에 표시하지 않으시려면 그냥
Thread.currentThread().getId();
만 입력해도 사라지더군요.
아무래도 타이밍(?)문제 인듯도 해서, 저 코드가 실행되므로써 쓰레드의 실행 속도가 적절하게 맞춰지는건지...(?뭔소리?)
어쨌든, 딜레이 문제는 사라졌습니다.
정답은 아니지만 어쨌든 해결책이긴 하네요....
혹시 정확한 내막을 아시는 분 답변부탁드립니다..ㅠㅜ