0

Ich arbeite an einer ziemlich großen App (ca. 70 Fragmente). Wenn ich durch meine App klicke, werden alle meine vorherigen Fragmente im Backstack gespeichert. Nach einigen Klicks ist mein Speicher ziemlich hoch und auf alten Handys (Samsung S3) bekomme ich eine OutOfMemory-Ausnahme.Fragment Backstack verwendet zu viel Speicher

Gibt es eine Möglichkeit, etwas über die Speicherauslastung des Fragment-Backstacks zu tun? ich schon versucht, meine eigene Backstack zu machen, ist es fixiert das Speicherproblem, aber das einzige Problem war, dass es nicht Suchbegriffe und Scrollen Positionen auf diese Weise erinnert:

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

Antwort

0

Sie Singletone Muster für Ihre Fragmente verwenden können. Wenigstens wird Speicher sicher reduzieren, weil Sie müssen nicht Ihre Fragmente jedes Mal neu zu erstellen, wenn Sie anrufen oder ihn wieder Stapel hinzufügen

// 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; 
    } 

und Sie können Ihr Fragment mit dieser Codezeile zuzugreifen:

SearchFragment.getInstance() 
+0

Aber ist diese speichern auch die Bildlaufposition etc? –

+0

Ich denke, dass Sie kein Problem mit dem Scrollen haben. –

0

in ganz speziellen Fällen können Sie die largeHeap Attribut auf „true“ im Manifest Tag eine größere Heap-Größe von Einstellung beantragen. Fragen Sie nie einen großen Heap, nur weil Sie nicht genügend Arbeitsspeicher haben und Sie eine schnelle Lösung benötigen - Sie sollten es nur verwenden, wenn Sie genau wissen, wo all Ihr Speicher zugeordnet ist und warum es beibehalten werden muss.

lesen https://developer.android.com/training/articles/memory.html

+0

Ich möchte das verhindern –

+0

@BartBergmans ist es gut!) Haben Sie diesen Link gesehen, vielleicht kann es Ihnen helfen http://StackOverflow.com/Questions/28483600/android-fragments-on-backstack-taking-up-too -much-memory –

+0

Eigentlich android: largeHeap ist das Instrument für die Erhöhung Ihrer zugewiesenen Speicher für die App. Es gibt keine klare Definition der Notwendigkeit, dieses Flag zu verwenden. Wenn Sie mehr Speicher benötigen - Android bietet Ihnen ein Tool, um es zu erhöhen. Aber die Notwendigkeit zu benutzen, du definierst dich selbst. – Stanojkovic