2016-04-19 8 views
2

Hier bin ich ein wenig verwirrt über Static Intent Calling Methode vs Direct Intent Calling. Was ist die beste Wahl, um eine neue Aktivität als Arbeitsspeicher zu erstellen?Statisch vs. nicht statisch Aufrufmethode für Aktivitätsabsicht

Wie ich weiß, wenn Intent-Methode Aufruf mit statischen enthält es Speicher für Anwendungslebenszeiten. ist es wahr oder nicht?

Lassen Sie nehmen Beispiel bewegen:

In Aktivität B

public static Intent newIntent(Context context) { 
     Intent intent = new Intent(context, B.class); 
     return intent; 
    } 

aufrufen Aktivität B von Aktivität A

In Aktivität A

startActivity(B.newIntent(this)); 

oder

Auf andere Weise kann die direkte Anrufaktivität nicht nach finish() ausgeführt werden. Recht?

startActivity(new Intent(context, B.class)); 

Noch denke ich Sekunde ist besser dann als Codepunkt von Ihnen und vom Gesichtspunkt des Gedächtnisses. Aber ich sehe viele Projekte enthält erste (statische Aufruf) -Methode. Also ich möchte wissen, welche Auswahl besser ist, neue Aktivität anzurufen?

+0

Wird meiner bescheidenen Meinung nach die erste gut sein, wenn Ihre Aktivität B mit einigen speziellen Extras oder Absichtsflaggen gestartet werden muss, über die Aktivität A nichts wissen muss. Wenn die Aktivitätsabsicht nur eine normale Absicht ist, denke ich, dass es nur Geschmack ist. – JacksOnF1re

+0

Meine Frage bezieht sich auf wird es zusätzlichen Speicher als normale Anrufe enthalten? –

+0

Ich denke, gemeinsame Absicht Anruf in BaseActivity wäre großartig. Wir können auch STACK clear, finish usw. verwalten. –

Antwort

1

Die Methode public static Intent newIntent() ist statisch, aber das ist alles, was statisch ist. Die Verwendung dieser statischen Methode besteht darin, dass Sie B.newIntent() aufrufen können, ohne eine Instanz von B zu haben.

Der Kontext, den Sie an B.newIntent(this) übergeben, ist nicht statisch und daher spielt es keine Rolle, ob Sie die Absicht in A oder in B erstellen.

in A Dieses

startActivity(B.newIntent(this)); 

ist nicht anders als dies in einem

startActivity(newIntent(this)); 

private Intent newIntent(Context context) { 
    Intent intent = new Intent(context, B.class); 
    return intent; 
} 

Ich möchte also wissen, was zu fordern neue Aktivität bessere Auswahl ist?

In der Funktionalität macht es keinen Unterschied. Wenn es einen Unterschied in der Speichernutzung gibt, wird es so wenig sein, dass Sie es nicht bemerken werden.

Soweit Stil Codierung geht, wäre es besser, die Schaffung der Absicht darin A zu halten, weil A ist B beginnt und B sollte es egal, wie A darum kümmert.

+0

Wie Sie sagten, "Wenn es einen Unterschied in der Speichernutzung gibt, wird es so klein sein, dass Sie es nicht bemerken werden."Ich habe festgestellt, es enthält mehr als 15 MB Heap-Größe ist es bequem und auch ein Problem der Erhöhung der Größe des Heap bei jeder neuen Aktivität mit statischen Methode aufrufen. –

+0

@JayeshKhasatiya Die 15 MB Heap ist nicht" gleich "auf den verschiedenen Geräten. Wenn all dein Code "startActivity (B.newIntent (this))" hat, ist dies wahrscheinlicher ein Speicherleck, das "this" ist nicht GC-fähig und bewirkt, dass der Speicher den Reference hält, bis der B intent "wird verwendet und zerstört. Heaps sollten immer ein (7 MB +) zugewiesenes Speicher haben, da das Linux (unter Android) es für die Paginierung verwenden kann. Um zu antworten,' So möchte ich wissen, welche Auswahl besser ist, neue Aktivität aufzurufen Beide sind abhängig von dem Gerät und den Daten dahinter. Ich bevorzuge 'startActivity (B.newIntent (this));' – Bonatti

+1

Hinzufügen einer statischen Methode zu einer Klasse erhöht nichts um 15 MB, was genau Messen Sie? –