2016-05-01 5 views
0

Ich habe eine Frage darüber, wie Speicher des Fragments freigeben, nachdem ich getSupportFragmentManager() codieren. PopBackStack()?Wie kann ich den Speicher des Fragments freigeben, nachdem ich getSupportFragmentManager() programmiert habe? PopBackStack()? Ich entferne es, aber Widgets instanziiert auch

FRAGE 1

Es gibt Fragment A und B. sie wie folgt definieren:

Fragment A = new Fragment(); 
Fragment B = new Fragment(); 

Änderung A zu B und fügen A in den Stapel zurück.

getSupportFragmentManager().beginTransaction() 
      .addToBackStack("A") 
      .replace(R.id.frame_content, A) 
      .commit(); 

Aber wenn ich onBackPress (rufen Sie die popBackStack) aufrufen, wird etwas Speicher von B falsch.Die wird nicht freigegeben, und es ist sogar noch mehr. Der letzte zugewiesene Speicher in Android Monitor ist 14,66 MB. Aber wenn ich platze, ändert sich der Speicher auf 14,72 MB. Ich möchte wissen, wie ich das beheben kann?

getSupportFragmentManager().popBackStack(); 

FRAGE 2

Es gibt Fragment A und B.

A Listview in A und, wenn ich Artikel klicken, wird A durch B ersetzt und A in den hinteren Stapel hinzufügen (genau wie die FRAGE 1).

Fragment B besitzen eine ScrollView. Wenn ich einen Bildlauf durchführe, scrolle ich zB zu Position A. Dann gebe ich popBackStack() zurück. Wenn ich auf ein anderes Element in A klicke, gebe ich wieder B ein, aber die ScrollView ist ebenfalls in Position A. Es sollte in der Startposition sein. Ich vermute, dass, weil die Scrollview nicht recycelt wurde. Wie es zu beheben?

Bitte. Irgendwelche Wucherungen werden geschätzt! Es hat lange gedauert. Macht mich verrückt.

Antwort

0

Speicher in Android, und tatsächlich wird Java vom Garbage Collector freigegeben, wenn auf ein Objekt nicht mehr verwiesen wird. Der Backstack ist etwas, woran android sich hält, wenn Sie von einer Aktivität oder einem Fragment in diesem Fall zur nächsten navigieren. Wenn der Benutzer zum vorherigen Bildschirm navigiert, muss er nicht von Grund auf neu starten, um ihn zu rendern. Wenn Sie möchten, könnten Sie A = null oder B = null. In Situationen mit wenig Speicher entscheidet ein Prioritätsalgorithmus, wer lebt und wer stirbt. Ja, ich weiß, klingt primitiv, aber würdest du es vorziehen, einfach zu stürzen? Java hat eine Sandbox und erlaubt keine Zeiger und andere Dinge auf niedriger Ebene wie destructors(), free() malloc() aus Sicherheitsgründen, diese Terroristen sind überall. Ich schlage vor, Sie google "Java Garbage Collector"

+0

Vielen Dank. Ich missverstehe den Android Monitor. Ich dachte, dass es zu einem Speicherleck kommt, wenn der zugewiesene Speicher nach dem Popping nicht nachgelassen hat. Es sollte auf das gelbe Auto in der Symbolleiste von Memory klicken. – JonsTank

+0

Gern geschehen, froh, dass ich helfen konnte. Ich habe kein gelbes Auto, aber ich erinnere mich, dass es vielleicht ein Plugin war, dass man auf das Icon klicken und die Müllsammlung erzwingen konnte – Pomagranite

Verwandte Themen