2014-02-27 1 views
1

내 앱에 ViewPager가있는 활동이 하나 있습니다. ViewPager에는 여러 조각이 있습니다.낮은 메모리에서 앱을 다시 가져올 때 조각이 다시 생성됩니다.

버그가 있습니다. "집"을 클릭하여 내 앱을 숨기고 다른 앱 (메모리 킬러)을 많이 시작하면 아이콘을 클릭하여 내 앱에 다시 전화를 걸 때 조각이 고장난 것입니다.

나는 많은 시간을 디버그하여 마침내 응용 프로그램이 낮은 메모리에서 돌아 왔을 때 활동이 처음부터 다시 시작된다는 것을 알았습니다. 즉, 활동의 정적 초기 코드에서 onCreate()로 시작한다는 것을 알게되었습니다. 그러나 시스템은 자동으로 나를위한 조각을 작성하는데, 이는 내 코드가 아니며 초기화가 부족합니다.

나는 무엇을 원하는지 알고있다. 그것은 낮은 메모리를 앓기 전에 응용 프로그램이 상태를 복원하는 데 도움이 싶습니다. 메모리가 부족하면 시스템이 내 조각을 죽였습니다.

나는 두 가지 질문을했다 : 시스템이 나를 위해 조각을 다시 만들 때

(1), 어떻게 그것을받을 수

? 이전 조각을 가리키는 많은 데이터 구조가 있습니다.이 포인터를 새 조각으로 어떻게 바꿀 수 있습니까? 자동화 된 조각이 onAttach()에 도착하면 액티비티의 이전 포인터 값을이 조각의 주소로 바꾼다. 다음과 같이하십시오 : Viewpager loose fragment connection on low memory kill. 이것이 공식적인 방법이고 최선의 방법이라면?

(2) 일부 경우에는 메모리가 부족하기 전에 상태를 복원 할 필요가 없습니다. 앱을 다시 시작하여 명확한 앱을 원합니다. 그래서, 시스템이 나를 위해 조각이나 다른 상태를 재현하지 못하도록하는 옵션이 있다면?

답변

1

(1) 보존하려는 모든 데이터를 onSaveInstanceState에 저장해야합니다. 그런 다음이 상태가 onCreate 메소드에서 다시 제공됩니다.

(2) 애플리케이션에 하나의 활동 만있는 경우 onStop 무시에서 finish으로 전화 할 수 있습니다. 그런 다음 앱이 백그라운드로 전송 될 때마다 앱이 다시 시작됩니다.

관련 문제