이동식 저장소

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...
}

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

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

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

MiTweetBottom 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