2013-08-13 5 views
0

saveInstanceState()은 활동 변수, EditText의 텍스트 등을 저장하는 데 사용됩니다.saveInstanceState() 메서드는 언제 사용합니까?

그러나보기 상태를 저장해야합니까?

시나리오를 알려 드리겠습니다. 내보기에는 3 개의 단추가 있습니다. 둘 중 하나를 클릭하면 WebView가 사용자에게 표시됩니다 (동일한 활동). 이제 응용 프로그램이 죽으면, 내가 살인을 당했을 때 사용자가 WebView로 표시되고 상태가 다시 생성되면 버튼 대신 WebView가 표시되는 상태를 저장해야합니까?

다른 시나리오는보기에 3 개의 탭이 있습니다. 각 탭을 선택하면 다른보기가 표시됩니다. 위의 경우에서 설명한대로 사용자가이 탭을 마지막으로 선택했음을 저장해야합니까?

활동 상태를 저장해야하는 경우와 그렇지 않을 경우를 설명 할 수 있다면 가장 좋을 것입니다.

답변

2

운영체제는 이전 상태 (화면 방향이 변경되거나 OS에 의해 백그라운드에서 앱이 종료 됨)를 다시 만들어야하는 시점과 새 인스턴스를 만들 때를 알고 있습니다 (사용자가 뒤로 버튼). onRestoreInstanceState() 메서드는 복원 할 상태가있을 때만 호출됩니다 (시스템이 이전 상태를 복원하는 경우, 활동의 새 인스턴스를 만드는 것과 반대 됨).

짧은 대답은, 다음, 당신이 onSaveInstanceState()onRestoreInstanceState()을 무시할 경우 적절한 경우, 시스템을 호출하고, 당신이 상태 저장 "해야한다"때 결정에 대해 걱정할 필요가 없다는 것입니다.

onSaveInstanceState()을 무시하면 활동 상태에 관한 모든 것을 저장해야합니다. 이것은 화면 방향 변경 중에 사용되는 방법입니다. 생각해보십시오. 휴대 전화를 돌리면 현재 앱이 탭을 변경하거나 사라진 화면이 사라질 것으로 생각하십니까?

자세한 내용은 the Android documentation on recreating an activity을 참조하십시오.

+0

내 앱에서 방향 변경을 지원하지 않아도됩니다. 인물 사진 만 지원합니다. – Geek

+0

이 방법을 사용해야할지에 대해서는 명확하지 않습니다. 왜냐하면 홈 버튼을 클릭하여 앱을 배경에 놓고 다시 앱을 열면 마지막 상태를 보여주기 때문입니다. 그러면 수동으로 저장하고 복원해야하는 이유는 무엇입니까? – Geek

+0

홈 버튼을 클릭하여 앱을 배경에 배치하면 앱이 완전히 중단되지 않습니다 (일시 중지됨). 앱을 백그라운드에서 실행 한 다음 휴대 전화가 메모리를 되찾고 앱을 다시 열려면 앱을 종료해야하는 다른 애플리케이션을 열면 상태를 잃어 버리게됩니다. 사용자는 두 시나리오를 다르게 다르게하지는 않았지만 다른 일들이 뒤에서 일어나고 앱이이 두 가지 시나리오를 모두 지원해야합니다. – Michelle

1

savedIntanceState에 대한 많은 연구를 app gets killed에 수행하지 않았습니다. 하지만 네, 당신은 어쩌면 정수 변수 (어떤 버튼을 클릭 한 상태로) 상태에서, 그래서 활동을 다시 만들 때, 당신은 어떤 웹보기 표시 (또는 없음) 알고 있는지 저장할 수 있습니다. 당신의 두 번째 상황도 마찬가지입니다.

저장 인스턴스 상태의 일부 추가 사용 사례 : 사용자가 방향 전환시 가장 많이 사용되는 시나리오의

하나는, 자신의 지주 텍스트 사용자 경우 사라질 것입니다, 당신은 화면에 편집 텍스트의 몇 가지가 있다고 기기 방향을 변경하십시오. 저장된 인스턴스 상태는 입력 된 텍스트를 복구하는 데 도움이됩니다.

또 다른 상황은 활동에 몇 가지 클래스 변수가 있거나 사용자가 수행 한 작업이나 임시 활동 목록 개체를 저장하는 데 사용되었을 가능성이 큽니다. 이러한 변수를 저장하면 방향 변경시 데이터를 복구 할 필요가 없습니다.

+0

이러한 메서드를 사용하여 상태를 저장하고 복원해야하는지 잘 모르겠습니다. 이유 중 하나는 내 앱이 세로 이외의 다른 방향을 지원하지 않는다는 것입니다. 두 번째 이유는 앱을 배경으로두고 다시 열면 배경에 놓은 마지막 상태를 보여줍니다. 예를 들어 백그라운드에 앱을 넣기 전에 특정 탭을 선택했는데 앱을 연 후에 기본 탭이 아닌 선택한 탭을 보여주었습니다. OS에서 살해당하는 앱의 세 번째 사례에 대해 이야기 할 수 있습니다. 앱이 OS에 의해 사망하고 사용자가 다시 앱을 열면 사용자가 홈 화면으로 이동해야한다고 생각합니다. – Geek

+0

앱이 백그라운드에 있지 않았기 때문에 닫혔습니다. 닫힌 앱을 열면 홈 화면 만 표시됩니다. 이 제 3의 경우에 맞습니까? – Geek

+0

개인적으로 나는 (DB 또는 sharedpref를 사용하여) 마지막으로 방문한 위치에 사용자를 유지하기 위해 최선을 다할 것입니다. 사용자가 집을 누를 때 대부분의 사람들은 돌아올 때 같은 화면을 선호합니다. 메모리가 충분하지 않아 OS가 앱을 죽이고 사용자가 알고있는 것이 아니기 때문에 집 버튼을 사용하여 떠났을 때 표시되는 내용을 볼 수 있습니다. OS가 앱을 죽인 후에 savedInstanceState를 복구 할 수 있는지 잘 모르겠습니다. –