18

코드 조각으로 만들고 FrameLayouts에 넣는 부분 인 FragmentActivity (Support Fragments)가 있습니다. 지금까지 모든 것이 잘 작동합니다. 이제 시스템이 내 활동을 죽이지 않는 한 모든 것이 반환됩니다. (또는 DDMS에서 중지 버튼으로 수행합니다.) 그런 일이 일어나지 않으면 아무 것도 부르지 않고 내 활동이 죽게됩니다. onDestroy가 호출되지 않습니다.Activity get을 죽이고 다시 만든 후 조각이 남아 있습니다.

그래서 내 App을 다시 열 때 모든 Fragments가 여전히 존재하며 NullPointerExeptions을 얻습니다. 왜냐하면 그들은 자신의 작업을 시도하기 때문입니다. 파편은 App의이 상태에 존재하지 않아야하므로 나에게 문제가된다.

backStack에서 필요하지 않으므로 거기에 넣지 않아도되고 popBackStack()을 호출하여 제거 할 수 없습니다.

어떻게하면 onCreate()에서 FragmentManager를 리셋 할 수 있습니까? 아니면 조각이 파손되는 것을 막을 수 있습니까?

+0

해결 방법을 찾으셨습니까? – Henry

답변

0

동일한 문제 일지 모르겠지만 얼마 전에 조각 라이프 사이클 메소드가 호출되지 않았으며 문제가 조각 관리자와 관련된 뷰 페이지의 조각에 문제가있었습니다.

따라서 supportFragmentManager 대신 childFragmentManager를 사용하여 문제가 해결되는지 확인하십시오.

+0

활동이 종료되면 onDestroy가 호출됩니다. 그리고 당신의 활동이 죽으면 파편들이 함께 사라질 것이라고 확신합니다. 당신의 활동이 죽게 될 것이라고 생각하게 만드는 이유는 무엇입니까? 조각에 대한 참조를 유지하는 것이 없습니까? – Christine

+0

문제는 onDestroy가 확실히 호출되지 않는다는 것입니다. 하지만 onCreate가 호출되면 그것이 파괴되었음을 알게됩니다. 내 모든 참조는 파괴 된 활동에 있습니다. – Towlie288

+0

확실히 onDestroy()를 호출하여 호출 할 수는 없으며 onDestroy()가 완료되지 않도록 관리하는 것과 같은 부작용이있을 수 있습니다. 그것은 엉망이 될 수 있습니다. –

2

실제로 이것은 정상 일 수 있습니다. 많은 프래그먼트를 인스턴스화하고 파기하는 대신, 안드로이드는이를 유지할 수 있습니다. 이는 특히 ViewPages에서 발생합니다.

많은 getActivity() 호출 또는 컨텍스트를 가져 오는 호출을 사용하고 있습니까? 이 경우, 널 (null) 또 다른 팁은 AsyncTasks 조심하는 것

Activity activity = getActivity(); 
if (activity == null) 
{ 
    Log.w("activity null!", "This will cause a crash if you access this variable!"); 
} 

같은 간단한을 수행하여 getActivity() 호출을 확인합니다. 백그라운드에서 이들 중 하나라도 실행 중이면 활동이 살아 있는지 또는 죽었는지 추적해야합니다. Android의 최신 버전에는 수명주기 검사가 포함되어 있지만 onAttach() 및 onDetach()에도 부울 플래그를 유지할 수 있습니다.

3

조각의 lifecycle은 활동의 라이프 사이클과 비슷하므로 다른 앱의 메모리를 절약하기 위해 시스템에서 삭제하고 다시 만들 수 있습니다. 즉, 조각의 상태를 저장하고 복원하는 메커니즘이 있음을 의미합니다. 당신이 그것을 사용해야합니다.

을 (데이터가 동적이고 직렬화되지 않기 때문에) 조각화 된 상태를 저장하고 초기화되지 않은 상태에 대한 기본 동작을 구현하십시오.

3

나는 늦게 정말 알고하지만 난 같은 문제가 내가 여기 여기

support FragmentPagerAdapter holds reference to old fragments

내가 문제가되면 있다는 것을 생각

ViewPager and fragments — what's the right way to store fragment's state?

을 답변을 찾을 생성 한 액티비티를 생성하고 프래그먼트 저장 프로그램이 아닌 일부 목록에 프래그먼트를 저장합니다. 활동이 다시 작성되면 조각도 작성되지만 조각 관리자는 전에 작성한 조각을 사용합니다. 이 조각은 앱을 백그라운드에두기 전에 만들어진 조각이기 때문에 조각이 getActivity()에 대해 null을 반환하는 방식입니다.

+2

[링크 전용 답변] (http://meta.stackoverflow.com/tags/link-only-answers/info)은 권장하지 않으므로 SO 답변은 검색의 끝점이어야합니다. 해결책 (시간이 지남에 따라 부실 해지는 경향이있는 참조의 또 다른 중간 기착 대). 링크를 참조 용으로 유지하면서 독립형 시놉시스를 여기에 추가하는 것을 고려해보십시오. – kleopatra

+1

이러한 링크는 실제로 많은 부분을 자세하게 설명합니다. 좋은 대답. – Smeet

관련 문제