2017-02-23 24 views
0

ウィジェットがあります。私はウィジェットを持っています。このフラグメントは、多くのメモリを消費します。フラグメントを残すに、メモリはまだなぜonDestroyView()は私のメモリを解放しないのですか

public class ListFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {  
     List<Contact> contacts = ContactHandler.getByGroup(group); 

     View view = inflater.inflate(R.layout.contact_list_fragment, container, false); 
     ListView listView = (ListView) view.findViewById(R.id.contact_list); 
     listView.setAdapter(new ContactAdapter(getActivity(), contacts)); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      ... 
      } 
     }); 
     return view; 
    } 

    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 
    } 
} 

UPDATE ...割り当てられている: 私は、またはアダプタを追加することなく、フラグメントを使用するにかかわらず場合、残りのメモリサイズが等しいこと、考え出しました。これは私のリストビューの実装ではありません。しかし空の断片の> 20MBは私のためにたくさんあるようです。

アクティビティとフラグメントにメモリを解放する方法を教えてください。

+0

ところで、あなたのonDestroyView()の実装は全く無意味です。 –

答えて

0

自動ガベージコレクションを使用してメモリを解放するJavaを使用しています。メモリが実際にガベージコレクション(または解放)される時期は制御できません。フラグメントへの参照を保持しないようにして、最終的にガベージコレクションが行われるようにしてください。メモリリークが疑われる場合は、LeakCanary(https://github.com/square/leakcanary)を使用してみてください。

+0

フラグメントを開く前に、アプリケーションは3MBを使用します。フラグメントが表示されている場合、最大45MBが使用されます。 Fragment und garbage collectionを閉じた後、27MBを使用します。 – Wookiee

+0

ガベージコレクションが実行され、十分なメモリが解放されていない場合は、メモリリークが発生している可能性があり、それを追跡する必要があります。 フラグメントを伝えてすべてを解放することはできません。物事はこのように動作しません。スタックオーバーフローで 'android memory leak'を検索し、トピックに関する詳細についてはGoogleを検索してください。 LeakCanaryはメモリリークをチェックするのに便利なツールであり、著者による優れたテクニカルティップはhttps://realm.io/news/droidcon-ricau-memory-leaks-leakcanary/です。 – Alan

関連する問題