2012-04-12 3 views
2

Ist es besser, den Instanzvariablen in onCreate, onResume oder nur bei der Deklaration Standardwerte zu geben? In Code:Ist es besser, den Instanzvariablen in onCreate, onResume oder nur bei der Deklaration Standardwerte zu geben?

Bei der Deklaration sie:

public Class Foo extends Activity{ 

    private String variable1 = "my super var"; 
    private int variable2 = 42; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
} 

oder während onCreate

public class Foo extends Activity{ 

    private String variable1; 
    private int variable2; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     variable1 = "my super var"; 
     variable2 = 42; 
    } 
} 

oder während auf Lebenslauf:

public class Foo extends Activity{ 

    private String variable1; 
    private int variable2; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    protected void onResume() { 
     super.onResume(); 
     variable1 = "my super var"; 
     variable2 = 42; 
    } 
} 

Danke.

+0

die Ihrer App-Lebenszyklus abhängt ..., aber vielleicht ist onResume die Wahl, in meinem Fall, ich benutze onCreate Zuhörer zu setzen und jede visuelle Sachen – DGomez

Antwort

3

Die obigen Antworten sind gut, und es hängt vom Codierungsstil AB, aber versuchen Sie in der Regel zu vermeiden, andere Standardwerte zuzuweisen, als wenn die Variablen deklariert werden. Dies hilft bei der Wartbarkeit. Wenn Sie in 6 Monaten zu Ihrem Code zurückkehren, um einen seltsamen Bug zu beheben, werden die im Code verstreuten Standardwerte zu Ihren Problemen beitragen.

Verwenden Sie onCreate, onResume usw. nur, wenn dies sinnvoll ist, und fügen Sie dann einen aussagekräftigen Kommentar hinzu, z.

// re-initialise foobarValue when the app regains focus 
// to ensure that the wobbly gong generator starts from the beginning 
foobarValue = 1; 

Prost

+1

Würde auch diese liberalen hinzufügen Verwendung von statischen Endwerten zur Verwendung für die initialisierten Standardwerte, um alle Ihre Standardwerte an einem Ort zu aggregieren. – JRaymond

2

Das hängt alles von Ihrem Sinn des Codierungsstils und natürlich der Instanzvariablen ab, die zugewiesen werden. Oft sind viele meiner Instanzvariablen Views und hängen somit von einem gültigen Kontext ab - also setze ich diese natürlich in onCreate(). Wenn ich eine Variable brauche, die jedes Mal zurückgesetzt wird, wenn ich eine Aktivität verlasse und zurückkomme, dann muss sie in onResume() haben. Inline tendiere ich dazu, wenn ich weiß, dass sich die Variable nicht ändert und nicht ändern sollte, und ich mache sie final. Die Balance zwischen inline konstruierten Variablen und onCreate() hängt davon ab. Einige Leute möchten vielleicht alle ihre Aufgaben an einem Ort haben, also macht onCreate() Sinn als eine Möglichkeit, alle Aufgaben an einem einzigen Ort zu erfassen, wenn es Ihnen egal ist, dass es keinen wirklichen Leistungsunterschied zwischen ihnen gibt, also legen Sie die Aufgabe wo Sie wollen.

0

Ich glaube nicht, dass es eine ganze Menge Unterschied zu tun, wie es als Standardwerte oder in onCreate, wenn die Werte einfach sind. Was onCreate ist gut für ist, wenn Sie Aktivitäten verwandte Dinge wie eine Context oder etwas aus der Intent, etc. Dann müssen Sie es in onCreate tun.

Allerdings macht diese Initialisierung in onCreate vs. onResume einen großen Unterschied. Wenn Sie Code in onResume setzen, wird es jedes Mal ausgeführt, wenn Sie den Fokus wieder auf die Aktivität richten (für eine genaue Definition sollten Sie die docs lesen). Das heißt, wenn Sie nach Hause drücken und dann zu Ihrer App zurückkehren, wird dieser Code erneut ausgeführt. Es kommt also wirklich darauf an, welches Verhalten du willst.

Verwandte Themen