[안드로이드 공부]/동기화

비동기 작업은 아버지가 살아있을 때 해라!

코코모아 2015. 10. 5. 14:56

아래는 코모스튜디오가 직접 만든 무료 앱이에요
(한 번만 봐주세요 ^^)

01

02

03

정각알림 만들기(말하는시계)

말하는 시계 (취침, 자전거) 

말하는 타이머 음성 스톱워치 

일반적으로 뷰 속에 버튼등을 넣을 수 있다. 그리고 이 뷰를 오버라이드 하면 새로운 커스텀 뷰를 만들수도 있다. 그러나 조심해야 할 점이 있으니... 뷰는 닫히면 사라진다. 만약 닫을 때 제거 하지 않으면 다음에 열 때 '니 자식의 애비가 살아 있으니 애비를 저리 치우고 다시 나와라'라는 말을 듣게 될 것이다. 즉, 무조건 제거를 해주어야 하는데 여기서 문제가 발생한다.


비동기 태스크가 문제다... 얘는 뷰가 닫혀도 언제든 갑자기 툭하고 나와서 실행 될 수 있다. 해당 클래스에 있다고 무심결에 이 뷰를 불러다 쓰면 죽느다. 이건 문제가 참 쉽다. 하지만 뷰 속에 있는 아이템을 불러다 쓰면 살아 있을 수도 있다. 뷰만 제거 하고 속 살은 제거 하지 않았기 때문에 아직 가비지 청소가 되지 않았다면 속살은 살아 있고 여기에 무엇이든 할 수 있게 되는 상태가 된다. 결국 속살에 아무리 뭔가를 해봐야.... 끊어진 메모리 속에 물 붓기만 하고 있는 꼴이 된다. 아무 변화도 없다는 얘기다.


즉, 아버지가 술을 많이 드셔서 요양원에 보내드렸는데... 그럼 아들도 같이 가서 간호 해야 하는데... 아들은 버젓이 집에 남아 있는 것이다. 그래서 옆집 사람이 아들보고 모내기 도움좀 부탁했는데.... 아들은 집에 없는 척 한다는 것이다. 아무리 불러봐야 숨소리도 안내고 꼼짝도 안하니... 옆집 할매는 분명 집에 있는거 알고 왔는데 아무도 없으니... 난감 하다는 것이지...


결론은..

뷰를 죽이려면... 속살도 다 죽여서 다른 곳에서 엉뚱하게 쓰지 못하도록 하거나....


스레드 및 비동기 태스크에서 전역 변수를 쓸 때는 항상 조심해야 한다! 비동기가 끝나면 죽이거나... 

모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다.
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요.