0

내가 몇 가지 다른 개발자와 안드로이드 프로젝트에서 일하고 인스턴스 상태는 가비지 컬렉션에 유지되고되지 않은 경우 버그가 제기되었다savedInstanceState 메모리 의미

실제 버그를보고 :

응용 프로그램은 한 조각의 조각으로 하나의 활동을합니다. 개발자 옵션에서 "활동을 유지하지 않음"을 선택하고 사용자가 보이는 조각을 변경하는 버튼을 클릭 한 다음 앱에서 다른 곳으로 이동했다가 돌아 왔을 때 앱은 마지막 상태가 아닌 원래 상태로 앱을 다시 시작합니다 .

프로젝트에 또 다른 개발자는 다음과 같은 문제 제기 :.

는 "인스턴스의 절약 부풀게하는 메모리 크기의 애플 리케이션의 원인이됩니다 이미 때문에 드로어 블의 양, 애플 리케이션의 메모리 크기는 too much.

사용자가 사용하지 않는 동안 앱이 다시 시작되면 ok입니다. '

내 이해는 savedInstance Bundle이 실제 메모리에 실제로 기록된다는 것이 맞지 않습니까? 위의 인용문은 유효한 관심사입니까?

답변

3

내 이해는 savedInstance Bundle이 실제 메모리에 실제로 기록된다는 것이 맞지 않습니까?

"실제 메모리에 기록"은 "파일 시스템의 파일에 기록됨"(a.k.a., "persisted")을 의미합니다.

인스턴스 상태 Bundle은 유지되지 않습니다. Android 5.0 이상에서는 에 대해 인 다른 후크를 제공하므로 재부팅시에도 문제가 발생하지 않습니다.

그러나 인스턴스 상태 Bundle은 프로세스 경계를 ​​거쳐 코어 OS 프로세스로 전달됩니다. 이 데이터는 프로세스가 종료 된 후에도 사용할 수 있지만 작업이 계속 진행되는 동안 (예 : 최근 작업 목록을 통해) 앱으로 돌아갑니다.

위의 인용문은 유효한 것입니까?

합리적 SO 여기에 사람들에 의해 평가 될 수있는 인용의 유일한 부분은 다음과 같습니다

이 인스턴스의 절약

저장을 부풀게하는 메모리 크기의 애플 리케이션의 원인이됩니다 Bundle의 1 바이트는 Bundle의 0 바이트를 저장하는 것보다 많은 메모리를 소비합니다. 따라서 수학적으로 견적은 정확합니다. 열쇠는 Bundle을 작게 유지하는 것입니다. 어쨌든 다른 이유로 IPC는 너무 커질 수 없습니다 (IPC 통화의 경우 1MB 제한). 작은 인스턴스 상태 Bundles은 문제가 아니어야합니다.

+0

수학적으로 말하면 상태 저장이라는 말은 앱이 수학 솔루션을 부 풀리는 원인이됩니다. 즉, 한 바이트가 부 풀리지 않으므로 성급한 일반화 오류입니다. – danny117

0

올바르게 코딩 된 saveinstance 상태는 한 번에 몇 주 동안 백그라운드에서 생존하며 최악의 경우 몇 킬로의 RAM을 필요로하지 않습니다.

다른 개발자는 학습 곡선 문제가 있습니다.

InstanceState는 현재 사용자가 응용 프로그램을 보는 방식을 다시 만드는 데 필요한 것을 저장합니다. tic tac toe analogy를 사용합시다. 너는 9 개의 포지션을 가지고있다. 각 위치는 x o 또는 비어 있습니다. 당신은 누구의 차례인지를 저장합니다. 여기서 열 번째 문자열은 로켓 과학이 아닙니다.

화면에 10 개의 드로어 블이있는 앱용 InstanceState. 드로어 블을 외부 저장 장치에 jpg 또는 bmp로 저장합니다. 그런 다음 drawStables의 이름을 instanceState에 저장합니다. 매우 복잡한 응용 프로그램을 다시 시작하는 컴퓨터 과학 1k 인스턴스 상태의 1000 문자가 아니 팽창.

SaveinstanceState는 멋진 앱이 아닙니다.