11

onPause()에 저장할 내용 (내 응용 프로그램의 경우)과 onSaveInstanceState()에 저장할 내용을 결정하려고 시도 할 때마다 힌트와 ​​명확한 지침을 위해 전체 SOUND를 비교했습니다."지속 상태"대 "현재 상태"

올바르게 이해하면 onSaveInstanceState()은 "런타임 변경 사항"또는 "현재 상태"(의미가 무엇이든)를 저장하는 데 가장 좋으며 onPause()은 "영구 상태"를 저장하는 데 가장 적합합니다.

"영구 상태"대 "현재 상태"를 구성하는 응용 프로그램을 결정하는 데 여전히 어려움이 있습니다. 예를 들어, 사용자 환경 설정이 명확하게 지속되는 동안, 사용자가 환경 설정을 변경할 때 안드로이드 UI 프레임 워크에 의해 자동으로 저장 될 때이를 저장해야합니까? onPause()에 저장해야합니까?

클래스 데이터 멤버를 onSaveInstanceState()에 저장해야합니까? 내 응용 프로그램에서 에 대해 클래스마다 수행해야합니까?

혼란 스럽습니다.

onPause()에 저장해야하는 것을 실제 사례로 가져올 수 있으며 onSaveInstanceState()에 저장해야하는 내용은 무엇입니까? 장치 구성을 변경하면 Except이 변경됩니다.

- 내 질문에 답하기 된

일부 새로운 통찰력 :

  • onSaveInstanceState의 Bundlenot written to anything이며, 그것은 어떤 식 으로든 지속 아니다.
  • onSaveInstanceState의 Bundle 데이터는 응용 프로그램이 닫힐 때까지 held in memory이됩니다.
+0

"장치 구성 변경을 제외하고"... 그게 무슨 뜻입니까? –

+0

이것은 방향 유형 변경과 관련이 있습니다. –

+0

@AlexLockwood "예외"라는 단어는 그것이 의미하는 것에 대한 링크입니다. 거의 지루한 예제는 오리엔테이션 유형 변경이지만 다른 것일 수도 있습니다. (예 : USB 키보드 연결, 인터넷 연결 설정 등) – ateiob

답변

7

onPause에 사용자 기본 설정을 저장할 필요가 없습니다. 왜냐하면 말하기를 프레임 워크가이를 대신하기 때문입니다.

영구 데이터와 상태 정보를 구별하려면 텍스트 편집기 응용 프로그램을 생각해보십시오.

영구 데이터

는의 사용자가 몇 단어를 입력 한 후 응용 프로그램을 종료 한 가정 해 봅시다. 사용자가 데이터를 파일에 저장하도록 명시 적으로 알려주지는 않았지만 데이터가 돌아올 때 데이터를 저장하는 것이 좋습니다. 이것은 영구 데이터이므로 onPause()에 저장하려고합니다.

상태 데이터 마찬가지로

, 당신은이 개 탭과 현재 선택된 탭 추적하는 변수가 말한다. 이것은 onSaveInstanceState()에 저장하는 상태 데이터입니다.

회색 문제

마지막으로 에디터에서 라인의 문자 수와 수를 추적 편집기에서 클래스를 상상한다. 이것은 상태 데이터이므로 onSaveInstanceState()에 저장하거나 다시 시작하고 다시 시작할 때 다시 계산할 수 있습니다. 예를 들어 데이터를 저장하여 네트워크 요청을 막을 수있는 경우 계산을 수행하는 데 걸리는 시간에 따라 버릴 수 있습니다. 당신이 떨어져 올바른 데이터를 다람쥐하지 못한 지역이 있다면 앱을 재생함으로써

또한 생각

그것은 명백해야한다. 홈 버튼과 같은 일을하고 기기 관리자에서 앱을 종료해야합니다. 이렇게하면 방금 일시 중지 된 것이 아니라 앱이 종료 된 모퉁이의 사례를 볼 수 있습니다.

UI 상태가 라이프 사이클 이벤트에서 일관되고 사용자 데이터가 남아 있으면 잘 처리됩니다. 내가 무엇을 저장할 때/결정하기 위해 여기 기준의 2 개 있다고 생각

코멘트에 따라

편집.

첫 번째는 매우 주관적입니다. 데이터를 저장 하시겠습니까? 진정으로 국가 나 데이터를 저장하지 않아도됩니다. 이 정보를 저장하면 더 나은 사용자 경험을 얻을 수 있습니까? 전자 메일을 작성하고 다른 응용 프로그램의 텍스트를 복사/붙여 넣으려고하면 응용 프로그램이 닫힐 때마다 전자 메일의 절반을 잃어 버리면 실망하게됩니다.

저장 대상을 결정하는 두 번째 부분은 갖고있는 데이터를 기반으로 UI 상태를 재구성 할 수 있는지 여부에 따라 달라집니다. 예를 들어, 텍스트 데이터를 저장 한 경우 사용자가 텍스트를 편집 중이라는 의미 여야합니다. 이제 편집 텍스트 탭으로 전환하여 저장된 텍스트를 채우는 것이 좋습니다.

일반적으로 말하자면, 사용자가 중단 한 동일한 장소로 사용자를 돌려 보내려한다는 욕망이라면 그 시점으로 돌아 가기 위해 필요한 상태 데이터에 대해 생각해 봐야합니다. 사용자 마지막으로 본 상태로 그것을 설정하는 변경해야 할 데이터

  • 앱 깨끗한로드 버전을 상상?
  • 여기로 돌아 가기 위해 어떤 데이터를 저장해야합니까?

이것은 실제로 안드로이드가 작동하는 방식으로, 활동이 파괴되고 재생성되며,이를 선택하면 모션을 다시 설정하는 것이 작업입니다.

+2

이것이 정확히 필요한 유형의 응답입니다 , 그래서 받아 들인다. 탭을 선택한 분류가 사용자가 입력 한 단어와 다른 이유는 무엇입니까? 선택한 탭이 "가지고 있어야하는"동안 입력 된 단어는 중요한 데이터이기 때문에입니까? 지속성과 상태를 결정하기위한 기준입니까? (BTW, 재부팅 사이에서도 선택한 탭을 지속적으로 저장하는 편집자를 보았습니다.) – ateiob

+1

여기에는 2 가지 기준이 있다고 생각합니다. 첫 번째는 매우 주관적입니다.이 정보를 저장하면 사용자 환경이 개선 될 것입니까? 전자 메일을 작성하고 다른 응용 프로그램의 텍스트를 복사/붙여 넣으려고하면 응용 프로그램을 전환 할 때마다 전자 메일의 절반을 잃어 버리면 실망하게됩니다. 두 번째 부분은 보유한 데이터를 기반으로 UI 상태를 재구성 할 수 있는지 여부입니다. 사용자가 텍스트를 편집 중이라는 의미의 텍스트 데이터를 저장 한 경우 해당 탭으로 전환하고 저장된 텍스트를 채우십시오. –

+0

P. 'onPause()'에 날짜를 저장하는 것은 이야기의 절반에 불과합니다. [CookieSyncManager documentation] (http://developer.android.com/reference/android/webkit/CookieSyncManager.html)에서 볼 수 있듯이 특정 작업을 취소하거나 중단하는 것이 나머지 절반 인 것으로 보입니다. 아니면 이것은 스토리지로 간주 될 수 있습니까? – ateiob

6

답변입니다. 세 가지 다른 방법으로 상태를 저장할 수 있습니다.

1) 앱 서브 클래 싱 (좋은 생각은 아닙니다). 2) SharedPreferences (단순한 데이터에 유용하고 빠르고 안정적 ​​임) 3) SQLite 데이터베이스 (보다 복잡하고 안정적 ​​임).

질문에 대답 해주세요. 안드로이드에는 정말 보장이 없습니다. 언제든지 특정 기능을 호출하지 않고 응용 프로그램을 파괴 할 수 있습니다. 따라서 중요한 데이터가 저장되는 경우 대답은이되자 마자 으로 저장하십시오. 나중에 저장하는 것이별로 도움이되지 않습니다. 뭔가를 필요로하는 경우 즉각 저장하십시오.

onSaveInstanceState()는 레이아웃 또는 방향 변경과 관련된 임시 변수를 저장하기위한 것입니다. 요약

지속 상태 보장이 없기 때문에/데이터 (즉, 충돌을 생존한다), onPause() 기다리지 말고, 최대한 빨리을 저장해야합니다. 그게 현실입니다.

+0

큰 설명. 감사! (핵심 팁이라고 생각하는 것을 강조 할 예정입니다.) – ateiob

+0

위의 설명이 있지만 앱이 죽기 전에 onPause가 호출되도록 보장됩니다 ...... 에서이 추론을 그릴 수있는 논리 문이 있습니다. 재개 된 응용 프로그램은 android 에 의해 사망합니다 2. 응용 프로그램은 onPause 응용 프로그램이 호출되었을 때만 비 재시작 (일시 중지 된 상태)이됩니다. 여기에 뭔가 누락 된 경우 알려주십시오 –

0

내가 가진 경우는 게임 데이터에 게임 데이터를 저장하고자하는 게임입니다.

다소 시간이 걸릴 수 있으므로 으로 시도하고 저장하는 것이 좋지 않지만 onStop으로 저장하는 것이 좋습니다.

내가 수행 한 검사에 따르면, onStop 백그라운드에서 잠시 onPause 블록을 실행할 수있을 것,이어야 그게 내가 (onPauseonStop10m 루프 1위한 간단한 테스트) 가정을 누를 때의 경우 . 누구나 차단 이론을 확인할 수 있습니까? onClose를 호출하기 전에 해당 버전 전에 당신이 죽을 수 있기 때문에

onStopHoneycomb 최대 (api11+)를 필요로한다.

here을 참조하고 테이블에서 killable을 찾으십시오. 현실이 문서와 일치하면 다른 질문이됩니다. :).