Null 처리로 fragment의 메모리 누수 문제 해결

차누·2023년 4월 14일
0

현재 작은 프로젝트로 Todo_list를 만들고 있었는데 흥미로운 주제가 생겼다. 바로 뷰를 연결해주는 Fragment와 ViewBinding사이에서 Fragment의 LifeCycle의 onDestory View와 onDestory 처리에 메모리에 누수라는 문제가 있다는 것을 알게되었다. 이를 해결하기 위해 ViewBinding에 Null처리를 하는 과정에서 코틀린의 장점인 Null Safety의 중요성을 깨달게 되었고 벨로그에 기록을 하게 되었다.

Fragment는 onCreateView에서 View를 생성하기 때문에 2개의 LifeCycle이 존재한다.

Fragment Life: onAttach ~ onDetach
Fragment View LifeCycle: onCreateView ~ onDestoryView

문제는 onDestory()와 onDetoryView()에서 발생한다. 2개의 fragment가 있다고 가정하고 fragment 전환시 전의 View가 지워지지 않고 존재하고 있어 메모리를 소모있었다.

해결방안

반복코드 제거

binding에 Null 처리하기

Calendar.kt


class Calendar: Fragment(R.layout.calendar) {

    //fragment
    private var _binding: CalendarBinding ?= null
    private lateinit var calendar: CalendarView
    //view
    private val binding get() = _binding
    
    
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = CalendarBinding.inflate(inflater,container,false)

        val view = binding?.root

        return view
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

이렇게 onDestroyView() 메소드에 binding = null 처리하면 해결 할 수 있단걸 알게되었고
또한 null 처리에서 다른 Id를 연결해주는 과정에서 코틀린의 Null-safety의 중요성을 알게되었고 오류도 방지할 수 있고 편리하게 사용있단걸 깨달았다. Null-safety에 대해 공부해서 기록할 예정이다.


        calendar = _binding!!.calendar

참고문헌
https://gift123.tistory.com/58

https://wooooooak.github.io/android/2019/08/05/fragment%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0%EC%99%80%EA%B0%9D%EC%B2%B4%ED%8C%8C%EA%B4%B4%EC%8B%9C%EC%A0%90/

https://developer.android.com/topic/libraries/view-binding?hl=ko#fragments

profile
to be good programmer

0개의 댓글