Durch Aufrufen von finish () werden die Speicherreferenzen für Activity nicht gelöscht

In einer vereinfachten Version meiner App habe ich zwei Aktivitäten, A und B. In Aktivität A wird B gestartet und nach einigen Aufgaben wird B beendet (). Bei Verwendung des Memory Analyzer-Tools auf den meisten Geräten (Galaxy Nexus 4.2, Droid 4 4.0.4 und Droid 2 2.3.4) wird keine Spur von Aktivität B angezeigt, was ich erwartet habe.

Auf Samsung S3, auf dem 4.1.1 ausgeführt wird, zeigt MAT jedoch Objekte der Aktivität B an, die aufgrund der Pfade zu den folgenden GC-Stammverzeichnissen noch vorhanden sind (schwache / weiche Referenzen ausgeschlossen):

Class Name                                                        | Shallow Heap | Retained Heap
-------------------------------------------------------------------------------------------------
com.myCo.myApp.ActivityB  @ 0x42720818                            |          264 |         3,280
|- <Java Local> java.lang.Thread @ 0x4271cf60  Thread-21941 Thread|           80 |        52,264
|- mOuterContext android.app.ContextImpl @ 0x426adf68             |          104 |           784
    |  '- mContext android.media.AudioManager @ 0x428e49a0        |           48 |           152
-------------------------------------------------------------------------------------------------

Jedes Mal, wenn ich Aktivität B starte und stoppe, zeigt MAT eine weitere Instanz des Speicherbedarfs von Aktivität B an. Und je mehr ich Aktivität B öffne / schließe, desto größer ist der in logcat gemeldete Speicherbedarf. Durch das Erzwingen eines GC durch MAT werden die Verweise auf den Speicher der Aktivität B nicht entfernt.

Ich habe drei Fragen.

Warum ist das Speicher- / GC-Verhalten auf den verschiedenen Geräten unterschiedlich?

Wird das Betriebssystem in S3 irgendwann zurückkehren und die gestrandeten Objekte der Aktivität B gecremt (sollte ich mir also keine Sorgen machen, da Android sie vor einem Absturz bereinigt)?

Wenn nicht, woher kommen die Thread- und AudioManager-Referenzen und wie würde ich sie löschen?

Vielen Dank an alle erfahrenen "Leck-Jäger" da draußen!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage