이것은 소셜 미디어 앱의 고전적인 문제입니다. 많은 상용 소셜 미디어 앱을 살펴보면 언급 한 과정을 거치면서 충돌을 일으킬 수 있습니다. 메모리 관리에 대한 생각은 조각을 추가 할 때 항상 메모리 사용량을 확인하는 것입니다. 그리고 특정 제한을 두드리면 이전 조각을 쓰레 쉬기로 결정하거나 사용자에게 경고합니다. 가장 큰 문제 중 하나는 사용자가 자세히 파고들 때 각 조각에있는 것과 관련이 있습니다. 각 조각 (일반적으로 소셜 미디어의 경우)에 많은 이미지가로드되어있는 경우 사용자가 계속 탐색 할 때 조각에있는 이미지를 스레 싱하는 것을 고려할 수 있습니다. 뒤로 버튼을 사용하여 돌아 오면 조각이 그런 다음 서버에서 이미지를 다시로드하십시오. 그래서 조각의 깎아 지른 수는 물론 스택 안에 들어있는 내용을 조합하여 조합 할 수 있습니다.
또한 뒤로 버튼을 사용하여 뒤로 탐색 할 때 스택 팝업은 메모리에서 조각을 제거하지 않습니다. 또한 명시 적으로 제거를 호출 한 다음 GC를 수행하여 추적 할 때 제거되도록해야합니다.
여기에는 탭과 연결된 조각을 보관하는 HashMap 스택의 예제가 있습니다. 이 같은 것,
private void popFragments(){
if(mStacks.get(currentTab)!=null && mStacks.get(currentTab).size()>1){
FragmentManager fm = getSupportFragmentManager();
Fragment currentFrag=mStacks.get(currentTab).pop();
// This is the part that will reclaim the memory
if(currentFrag.isAdded()){
fm.beginTransaction().detach(currentFrag).commit();
fm.beginTransaction().remove(currentFrag).commit();
}
currentFrag=null;
System.gc();
Fragment newFrag=mStacks.get(currentTab).lastElement();
if(newFrag !=null && newFrag.isAdded()){
fm.beginTransaction().attach(newFrag).commit();
}
else if(newFrag !=null && !newFrag.isAdded()){
fm.beginTransaction().add(R.id.fragment_content, newFrag,newFrag.getTag()).commit();
fm.beginTransaction().attach(newFrag).commit();
}
actionbar.setLargeTitle(newFrag.getTag());
}
}
행운을 빈다.
답장을 보내 주셔서 감사합니다. 하지만 제 질문은 단편에 관한 것이지 활동에 관한 것이 아닙니다. – XWang
그곳에 같은 ... – safari
활동을 위해, 나는 시작 모드와 깃발을 설정할 수 있습니다. 그러나 단편에 대해서 어떻게 할 수 있습니까? 고마워. – XWang