0

かなり大きなアプリケーション(約70個のフラグメント)に取り組んでいます。私のアプリをクリックすると、私の以前のすべての断片がバックスタックに保存されます。いくつかのクリック後、私の記憶はかなり高く、古い電話(サムスンS3)で私はOutOfMemory例外が発生します。フラグメントのバックスタックで多すぎるメモリを使用する

フラグメントのバックスタックのメモリ使用量について何か方法がありますか? は、私はすでに自分のbackstackを作ってみました、それはメモリの問題を修正しましたが、唯一の問題は、それが検索用語とスクロール位置をこのように覚えていないということでした。

Stack<BackStackEntry> mBackStack = new Stack<>(); 
mBackStack.add(new BackStackEntry(tag, fragment.getClass())); 

答えて

0

あなたの破片のためのSingleToneパターンを使用することができます。あなたは必見いけないので、少なくとも、あなたがで呼び出すときに毎回、あなたの断片を再作成するか、バックスタック

// Singleton implementation 
    private static YourFragment instance; 

    public YourFragment() { 
    } 

    /** 
    * Static method which return the instance of the fragment. If the fragment is null, load it, 
    * else create new fragment. Singleton pattern. 
    * 
    * @param context 
    * @return 
    */ 
    public static YourFragment getInstance() { 
     if (instance == null) { 
      instance = new YourFragment(); 
     } 

     return instance; 
    } 

にそれを追加することを確認するためにメモリを削減され、あなたのコード行を使用してフラグメントにアクセスすることができます。

SearchFragment.getInstance() 
+0

しかし、これはまた、スクロール位置などを保存しますか? –

+0

私はあなたがスクロールに問題がないと思う。 –

0

非常に特殊な状況では、 によって大きなヒープサイズを要求し、マニフェスト タグでlargeHeap属性を "true"に設定することができます。 にはメモリが不足しており、すぐに修正が必要なため、大量のヒープを要求しないでください。 は、すべてのメモリが割り当てられている場所を正確に把握している必要があります。

読むhttps://developer.android.com/training/articles/memory.html

+0

私はそれを防止したい –

+0

@BartBergmansそれは良いです!)あなたはこのリンクを見たことがありますか?多分それはあなたを助けることができますhttp://stackoverflow.com/questions/28483600/android-fragments-on-backstack-takingup-too -much-memory –

+0

実際にアンドロイド:largeHeapはあなたの割り当てられたメモリをappに増やす手段です。 このフラグを使用する必要があるという明確な定義はありません。より多くのメモリが必要な場合 - Androidは、あなたにそれを増やすためのツールを提供します。しかし、使用の必要性、あなた自身を定義します。 – Stanojkovic

関連する問題