2016-05-31 3 views
1

Angenommen, ich habe 3 Aktivitäten Demo1, Demo2, Demo3 und eine Klasse GlobalClassWelche Aktivitäten werden per GC aus dem Speicher gelöscht?

GlobalClass

public Class GlobalClass{ 
public static int staticVar = 1; 
} 

Demo1

public Class Demo1 extends Activity{ 
onCreate(){ 
    if(buttonClicked = 1){ 
    openDemo2();} 
    else{ 
    openDemo3();} 
    } 
} 

Demo2

public Class Demo2 extends Activity{ 
int var = 10; 
onCreate(){ 
    GlobalClass.staticVar = var; 
} 
} 

Demo3

public Class Demo3 extends Activity{ 
    onCreate(){ 
    int var = GlobalClass.staticVar; 
    } 
} 

So können nun davon ausgehen, wir Demo1 sind und wir öffnen Demo2 erste. Dann schließen wir Demo2, kehren zu Demo1 zurück und öffnen Demo3. Dann schließen wir auch Demo3 und kehren zu Demo1 zurück.

  • Deshalb an dieser Stelle der Aktivität/Aktivitäten im Speicher nach GC sein werden?

  • Wird die gesamte Ansicht (Layout dieser Aktivität) für diese Aktivität im Speicher gespeichert?

  • Wird statische Variable einen Unterschied machen?

Antwort

0

Sie können nichts Bestimmtes über GC annehmen. Es basiert auf Anforderungen des Prozesses und der Verwendung der Objekte. Beachten Sie, dass GC nicht mit der geringen Speicherkapazität von Android identisch ist, wodurch nicht verwendete Prozesse vollständig zerstört und zerstört werden. In Ihrem Beispiel von Demo1 -> Demo2 -> Demo3 besteht die Möglichkeit, dass keine von ihnen zurückgewonnen oder Müll gesammelt wird. Wenn Demo1 Demo2 startet, wird Demo1 angehalten und gestoppt, ist aber immer noch im Speicher für den Prozess Ihrer App. Wenn Demo2 beendet wird und zu Demo1 zurückkehrt, wird Demo2 über die BACK-Taste verlassen (veranlasst, dass onDestroy() aufgerufen wird), dann sollte Demo2 und der zugehörige Speicher über GC gehen. Aber es hängt auch davon ab, was Sie in Demo2 machen. Es ist durchaus möglich, versehentlich Objekte zu verlieren, wenn Sie nicht vorsichtig sind.

+0

Eigentlich musste ich wissen, ob die Aktivität, in der die statische Variable referenziert wird oder von der die statische Variable einen Wert erhalten hat, welche davon im Speicher bleiben würde? –

+0

Hauptpunkt hier ist die statische Variable. Ich muss wissen, wird statische Variable einen Unterschied machen? –

+0

Es ist eine sehr schlechte Idee, statische Daten zwischen Aktivitäten zu teilen, da sie unabhängige Lebenszyklen haben. Das heißt, die Klasse, die Sie mit einem statischen Feld erstellt haben, das von allen Klassen verwendet wird, sollte existieren, solange eine der Aktivitäten existiert. –

Verwandte Themen