일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Rxjava
- architecture
- android
- Codeforces
- TEST
- pandas
- Coroutine
- MiTweet
- Python
- Coroutines
- textfield
- ProGuard
- activity
- livedata
- 쿠링
- MyVoca
- AWS
- 프로그래머스
- relay
- 암호학
- Hilt
- 코루틴
- Compose
- GitHub
- 백준
- Gradle
- Kotlin
- boj
- androidStudio
- 코드포스
- Today
- Total
이동식 저장소
MiTweet 개발일지 15 본문
꾸준히 개발하는 중.
화면 회전 시에도 트윗 데이터를 보존
안드로이드에서 기기의 방향을 회전하면 시스템에서 화면을 다시 그리게 되는데, 이 과정에서 일반적으로는 이전 화면의 데이터가 손실된다. 데이터를 보존하려면 ``savedInstanceState``을 적절히 활용할 필요가 있다. 그렇다. ``onCreate()``류의 메소드에서 자주 보이는 그것이다.
액티비티가 종료된 후 다시 초기화될 때, 이전 액티비티의 데이터가 ``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
위의 글에서는 일단 프래그먼트를 전부 다 만들어서 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 |