티스토리 뷰
앱을 background 로 내린 뒤, 오랜시간 방치 후 재실행하면 저장해놓은 bundle (arguments, intent...) 이외에는 전부 날아간다.
Fragment
fragment manager 의 fragment 기록들도 남아있어서. 재실행시 fragment manager 를 기반으로 fragment 를 다시 그리는데, 이때 fragment 의 모든 멤버변수는 다 날아가고 onCreate() 부터 다시 실행됨
이때 화면을 그리는데 필수적인 데이터들을 member var 로 선언해 놓으면 전부 날아가기 때문에 (fragment instance 를 새로 만드는것과 동일)
argument 에 저장해 놓고, onCreate 에서 argument 에서 불러와서 다시 초기화 해주는 것이 아니면, fragment 는 내가 원하는 화면을 그리지 못함
Ex) 아래와 같이 url 을 생성자에서 받아 webview 를 로드하는 fragment 라면,
class WebViewFragment(
private val url: String? = null
): Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.webView.loadUrl(url)
}
}
이런 식으로 bundle 로 필수 변수들을 받아 세팅해 주어야, LMK로 인해 정리되어도, 재생성시 이미 저장된 bundle 을 가지고 화면을 제대로 그릴 수 있다.
class WebViewFragment: Fragment() {
companion object {
fun get(
url: String? = null
) = WebViewFragment().apply {
arguments = Bundle().apply {
url?.let { putString("url", it) }
}
}
}
private var url: String? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
url = arguments?.getString("url")
binding.webView.loadUrl(url)
}
}
일반적으로 ViewModel 에 저장해놓으면, 데이터는 날아가지 않는다고 하지만, LMK 의 케이스는
fragment, viewmodel 모든것을 재생성한다.
아래는 로그.
====> onPause() viewModel Address: com.myapp.test.WebViewModel@ed683d
====> onPause() viewModel.url: http://www.naver.com
// LMK
====> onResume() viewModel Address: com.myapp.test.WebViewModel@760b534
====> onResume() viewModel.url:
'Computer > Android&iOS' 카테고리의 다른 글
[Android] xml drawable stroke 점선 표시 (dotted stroke) (0) | 2023.05.02 |
---|---|
[Android] Compose 함수 이름 규칙 (0) | 2023.01.27 |
Android Studio Dolphin Logcat error (0) | 2022.12.29 |
Custom View Functions (0) | 2022.11.10 |
error: cannot find symbol @dagger.hilt.InstallIn(value = {ApplicationComponent.class}) (0) | 2021.12.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- GIT
- 깃헙
- nodejs
- 리눅스
- 서버
- 손석희
- 안드로이드
- 앵커브리핑
- BBC 가쉽
- 뉴스룸
- 스위프트
- 점유율
- git hub
- 배열
- C언어
- Swift
- C
- Asterisk
- IOS
- node.js
- Phaser
- xcode
- Kotlin
- Android
- Node
- php
- mysql
- linux
- CentOS
- 노드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함