2013-01-03 2 views
1

여러 개의 조각으로 소셜 앱을 개발 중입니다. 격자보기가 포함 된 Friend 프래그먼트가 하나 있습니다. 하나의 항목을 클릭하면 프로필 조각이 열리고 다시 스택에 추가됩니다. 그런 다음 프로필 조각에서 사용자는 여전히 새 Friend 프래그먼트를 입력하여 백 스택 등에 추가 할 수 있습니다. 따라서 백 스택은 프렌드 -> 프로파일 b -> 프렌드 c -> 프로파일 d -> 프렌드 e가 될 수 있습니다 -> 프로필 f -> ...백 스택으로 조각을 사용할 때 메모리 사용을 줄이는 방법은 무엇입니까?

내 질문에, 사용자가 여러 수준을 입력하고 다시 조각에 여러 조각을 넣을 수 있습니다, 그리고 조각의 일부 이미지 뷰를 많이 줄이는 방법 메모리 사용 및 OOE 방지?

미리 감사드립니다.

답변

2

아마도 실제 스택을 제한 할 수 있습니다. 여기에 게시물이 할 수있는 방법은 다음과 같습니다 How to limit the number of the same Activity on the stack for an Android application

안부

사파리를

PS : 또한 여기에 좀 걸릴 : 여기 http://developer.android.com/guide/components/tasks-and-back-stack.html


봐, 당신이해야 할 일 이잖아 :

FragmentManager fm = getActivity().getSupportFragmentManager(); 
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {  
    fm.popBackStack(); 
} 

e 이런 식으로 :

FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE) 

희망이 도움이됩니다.

최고 감사 카드

+0

답장을 보내 주셔서 감사합니다. 하지만 제 질문은 단편에 관한 것이지 활동에 관한 것이 아닙니다. – XWang

+0

그곳에 같은 ... – safari

+0

활동을 위해, 나는 시작 모드와 깃발을 설정할 수 있습니다. 그러나 단편에 대해서 어떻게 할 수 있습니까? 고마워. – XWang

1

이것은 소셜 미디어 앱의 고전적인 문제입니다. 많은 상용 소셜 미디어 앱을 살펴보면 언급 한 과정을 거치면서 충돌을 일으킬 수 있습니다. 메모리 관리에 대한 생각은 조각을 추가 할 때 항상 메모리 사용량을 확인하는 것입니다. 그리고 특정 제한을 두드리면 이전 조각을 쓰레 쉬기로 결정하거나 사용자에게 경고합니다. 가장 큰 문제 중 하나는 사용자가 자세히 파고들 때 각 조각에있는 것과 관련이 있습니다. 각 조각 (일반적으로 소셜 미디어의 경우)에 많은 이미지가로드되어있는 경우 사용자가 계속 탐색 할 때 조각에있는 이미지를 스레 싱하는 것을 고려할 수 있습니다. 뒤로 버튼을 사용하여 돌아 오면 조각이 그런 다음 서버에서 이미지를 다시로드하십시오. 그래서 조각의 깎아 지른 수는 물론 스택 안에 들어있는 내용을 조합하여 조합 할 수 있습니다.

또한 뒤로 버튼을 사용하여 뒤로 탐색 할 때 스택 팝업은 메모리에서 조각을 제거하지 않습니다. 또한 명시 적으로 제거를 호출 한 다음 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()); 
    } 
} 

행운을 빈다.

관련 문제