예전에 받은 답변중.. 액티비티가 비교적 메모리를 많이 차지하기 때문에 액티비티는 많지 않은게 좋다는 답변을 들은적이 있습니다..
그때했던 질문이 액티비티 내부에 다른 액티비티를 띄울수있는 방법에 대한 질문이었는데..
이러한 답변으로 뭐 결국 액티비티를 띄우는게 아니라 레이아웃을 추가하는 방식으로 했었습니다.
아무튼.. 질문은 이게 아니고..
현재 구성하려는게 버튼이 6개가 있으면 각 버튼별로 실행되는 액티비티의 레이아웃 구성이 똑같습니다..
단 이미지나 텍스트 내용만 다르구요..
이때 할수 있는 방법이..
실행되는 6개의 액티비티와 레이아웃을 각각 만들어 호출하는 방법..
하나의 액티비티를 만들되 넘겨받는 버튼의 값에 따라 이미자나 텍스트 리소스만 변경하는 방법..
이 있겠는데요..
사실 직관적으로 만들자면 첫번째 방법이 좋을테지만.. 액티비티의 수가 늘어나는 단점이 있는데요..
하지만 액티비티 수가 늘어나봤자 어차피 실행되는 액티비티는 선택한 버튼에 따라 6개중 하나의 액티비티만 실행되므로
메모리에는 전혀 상관이 없죠?? 어차피 6개 해봤자 얼마 안되지만.. 이론적으로 액티비티와 메모리 관계가 궁금한 겁니다..
그리고.. 한가지 더 궁금한게.. 만약 각각의 액티비티로 만들었다고 하고.. 첫번째 버튼을 눌러 첫번째 서브 액티비티를 실행후..
뒤로버튼을 눌러 액티비티가 죽었을 경우.. 사용했던 메모리는 GC에 의해 완전히 정리가 되나요?? 아니면 실행한 찌꺼기가 남나요??
만약 찌꺼기가 남는다면 액티비티의 수가 많고 실행하면 실행할수록 메모리 사용량이 많아진다는 뜻이 되잖아요..
화면 구성방법은 값에 따라 리소스 변경하는 방법이 좋구요
화면에 대한 특정 키(상수)값을 설정하시고 그 값에 따른 리소스 리스트를 반환할 수 있는 함수를 만드셔서
구현하시면 쉬우실듯 보입니다.
액티비티의 개수에 따라서 메모리 효율이 안좋아지는게 아니고 액티비티 생성할때 필요한 메모리 할당연산이 많아서
잦은 액티비티 생성은 오버해드를 발생할 수 있습니다.
마지막질문은 메모리는 정리가 안됩니다.
달빅이 잘 구현되어서 정리를 하긴 하지만 객체 종료시점에 GC가 돌진 않습니다.
객체가 종료되는 시점에 사용한 변수나 타 객체들을 null 로 되돌려주시는게 GC가 빨리 처리할 수 있도록 도와주는거에요
달빅에서 GC가 메모리 사용이 500k 마다 한번씩 도는걸로 알고 있는데 모든 레퍼런스 참조 메모리를 역순으로 타고올라가서
사용 유무를 판단하는데 꾀 시간이 많이 걸리고, GC가 한번 돌때마다 100ms 딜레이가 생깁니다.
개발에 참고하세요 :)