이를 수행하는 API는 없지만 지난주에 똑같은 일이 궁금
했기 때문에 직접 구현 한 연습으로 가져갔습니다.
내 방법을 사용하면 Fragment
백 스택의 어느 곳에서나을 제거 할 수 있으며 이는 FragmentManagerImpl 및 BackStackRecord에 백 스택 정보를 저장하는 내부 변수를 수정하기 위해 refrection을 사용하여 수행됩니다 .
몇 가지 중요한 변수가 있습니다.
mBackStack
- 정보, 이전 항목, 애니메이션 등BackStackRecord
을 보유 하는 s를 저장합니다.Fragment
mActive
- 모든 추가Fragment
의mAvailBackStackIndices
-새로 삽입 된 레코드에서 사용할 수있는 인덱스를 저장null
합니다.mActive
- 및 기타
150 Fragment
초 이상으로 테스트했으며 누수를 감지 할 수 없었지만 힙 인 만 모니터링하고 DDMS
다른 메모리 분석을 수행하지 않았습니다.
따라서 일 부팅이 손상 될 수 있으므로 코드를 탐색하고 다시 테스트하고 더 나은 답변을 제공하는 사람이 있는지 확인하고 프로젝트에서이 작업을 정말로 수행해야하는지 다시 생각하십시오.
코드 를 GitHub에 요점으로 업로드했는데 도움이 되었기를 바랍니다.
-------------------이전의 조각을 재사용하려면 먼저 모든 조각을 숨기고 원하는 조각을 한 번에 표시하기 만하면됩니다. 이렇게하면 조각을 제거하거나 다시로드하지 않고도 조각을 재사용 할 수 있습니다. 하지만 구현하기 전에 백 스택에 조각을 추가해야합니다.
출처
https://stackoverflow.com/questions/22050281