이동식 저장소

MiTweet 개발일지 15 본문

프로젝트/MiTweet

MiTweet 개발일지 15

해스끼 2021. 1. 5. 20:21

꾸준히 개발하는 중.

화면 회전 시에도 트윗 데이터를 보존

안드로이드에서 기기의 방향을 회전하면 시스템에서 화면을 다시 그리게 되는데, 이 과정에서 일반적으로는 이전 화면의 데이터가 손실된다. 데이터를 보존하려면 ``savedInstanceState``을 적절히 활용할 필요가 있다. 그렇다. ``onCreate()``류의 메소드에서 자주 보이는 그것이다.

클릭하면 API 문서로 이동합니다.

액티비티가 종료된 후 다시 초기화될 때, 이전 액티비티의 데이터가 ``savedInstanceState``에 저장되어 주어진다. 물론 액티비티가 처음 실행되는 경우에는 ``null``이다. 앱이 완전히 종료된 후 다시 실행되는 경우에도 ``null``이다.

 

저장할 데이터가 있는 경우 ``onSaveInstanceState()``에서 데이터를 저장하고, ``onCreate()`` 등에서 데이터를 복원해야 한다.

// Fragment의 경우. Activity는 onCreate()에서 복원
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
	// ...
    
    if (savedInstanceState != null) {
    	// restore...
    }
    
}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    // save something...
}

화면 크기 등이 바뀔 때에도 화면이 다시 그려지는데, 위의 메소드를 적절히 활용하여 데이터를 복원하자.

회전하기 전-회전 후-다시 회전

프래그먼트 이동 시에도 데이터 보존하기

``MiTweet``은 ``Bottom Navigation Activity`` 템플릿을 이용하여 만들었다.

이거

실제로 앱을 구현해 보니, 프래그먼트를 이동할 때마다 타임라인이 새로 로딩된다. 성능 향상을 위해 타임라인 전체를 새로 로드하지 않고 기존의 정보를 활용하고자 하였다.

 

다음의 링크를 참고하여 구현할 수 있었다. 공앱은 어떻게 한 거지?

Bottom Navigation View With Fragments (No fragment re-creation). | by Bukunmi Aluko | Medium

 

Bottom Navigation View With Fragments (No fragment re-creation).

Solving the problem of always creating fragment new instance

medium.com

위의 글에서는 일단 프래그먼트를 전부 다 만들어서 add한 다음 숨겨 놓고, 하단 버튼을 터치할 때마다 해당 프래그먼트를 보여주는 방식을 사용했다. 그런데 이게 성능상 괜찮은 방법인지 모르겠다. 나중에 프로필이랑 알림 탭도 다 구현할 건데, 이것들을 한번에 모두 로딩하면 성능이 많이 나빠질 것 같다. 일단 그때 가서 다시 생각하기로 했다.

 

참고로 이거 두 개 하는데만 4시간 걸렸다. ㅠㅠ 역시 공부는 무한한 삽질의 연속..

'프로젝트 > MiTweet' 카테고리의 다른 글

MiTweet 개발일지 16  (0) 2021.01.14
MiTweet 개발일지 14  (0) 2021.01.02
MiTweet 개발일지 13  (0) 2020.10.18
MiTweet 개발일지 12  (0) 2020.09.30
MiTweet 개발일지 11  (0) 2020.09.30
Comments