2010-12-26 18 views
1

Was ich suche, ist eine bessere Codierung mit Parametern wie Speicherverwaltung, schnellere Verarbeitung und sauberere Codierung. Gibt es einen Satz von Good Coding Guide für Android, mit dem wir bessere Anwendungen erstellen können? Beispielsweise;Better Android Coding

Welche der folgenden Konvention ist unter ihnen besser:

BEISPIEL - 1

TextView tv = (TextView) findViewById(R.id.sampleTextView); 
tv.setText("Hello World"); 

- ODER -

((TextView) findViewById(R.id.sampleTextView)).setText("Hello World"); 

BEISPIEL - 2

BroadcastReceiver br = new BroadcastReceiver() { 
     ... 
     ... 
} 

IntentFilter filter = new IntentFilter(...); 
registerReceiver(filter, br); 

- ODER -

registerReceiver(new IntentFilter(), br); 

- ODER -

registerReceiver(new IntentFilter(), new BroadcastReceiver()); 

, die in geringerem Speicherverbrauch und helfen bei der schnelleren Speicherbereinigungs führen. Ich habe beide Arten der Codierung in Android Framework (in Gingerbread sowie Froyo) gesehen.

Ich habe seit mehr als einem Jahr auf Android entwickelt, und ich denke, dass jeder Code, aber sauber und richtig zu codieren, was den Unterschied macht. Kann jemand vorschlagen oder aus ihrer Erfahrung und Wissen heraus helfen.

+0

Sie könnten [baksali] (http://code.google.com/p/smali/) verwenden, um den Bytecode zu zerlegen und zu inspizieren, aber Sie werden keine wesentlichen Unterschiede finden. –

+0

@ jleedev: \ o /;) – JesusFreke

Antwort

0

Für beide Beispiele, die Sie geben, gibt es keinen Unterschied zwischen den verschiedenen Alternativen, die Sie erwähnen.

Wenn Sie dies auf einer tieferen Ebene untersuchen möchten, schreiben Sie einen Beispielcode, den Sie untersuchen möchten, kompilieren Sie ihn in ein Jar und verwenden Sie dann einen Disassembler, um genau zu sehen, welcher Bytecode generiert wird. Sie sollten sehen, dass der Bytecode in jedem Ihrer Fälle im Wesentlichen gleich ist.

4

Diese Art von Mikrooptimierungen ist nicht wirklich eine Überlegung wert, es sei denn, Sie haben in Ihrer Anwendung einen signifikanten Leistungseinbruch festgestellt. In jedem Fall würde ich vermuten, dass es sogar möglich ist, dass der Compiler das Beispiel 1a = Beispiel 1b herleiten kann. Die Höhe der Leistungsdifferenz zwischen ihnen würde bestenfalls ein paar hundert Nanosekunden betragen, da Fernsehen eine Referenz ist und billig ist, sich zu bewegen.

Meine Empfehlung wäre, so zu codieren, dass es für Sie und Ihr Team so lesbar wie möglich ist. Wenn Sie eine bessere Leistung benötigen, werden bessere Algorithmen viel mehr helfen. Wenn Sie bereits diese besseren Algorithmen verwendet haben, sollten Sie mit dem Profiler experimentieren, um herauszufinden, welcher schneller ist.

0

Beide Beispiele bedeuten in Sachen Speicherverwaltung oder Prozessorzeit fast nichts. Der Compiler führt die Variablen in beiden Beispielen ein. Und selbst wenn er das nicht getan hätte, ist das nur eine Objektreferenz. Kein Benchmark könnte Ihnen einen solchen Unterschied zeigen.

In solchen Fällen lieber lesbaren Code schreiben.

Sie sollten sich mehr Gedanken über die Präformanz an Orten machen, die es wirklich wert ist - in der Datenbankbearbeitung oder Bild-/Videoverarbeitung.

AFAIK, gibt es keine speziellen Empfehlungen für Android. Alle von ihnen sind allgemeine Hinweise zum Arbeiten mit Speicher, Datenbanken, Netzwerk und so weiter.

Lesen Sie Effective Java von Joshua Block, es wird ausreichen.

0

Ich stimme allen anderen zu, die sagen, dass diese Art der Optimierung nichts tun wird, was Sie bemerken können.

Der einzige Fall, in dem Sie die Optimierung in Betracht ziehen sollten, ist, wenn Sie eine komplexe Zeichenmethode von Hand implementieren oder eine große XML-Datei analysieren (einige Änderungen können die Laufzeit verbessern).

Wie auch immer, vor der Optimierung immer messen.

Sie können nicht optimieren, was Sie nicht

messen

Um zu erfahren, wie Ihre Anwendung profilieren, lesen Sie diese

http://www.jpct.net/wiki/index.php/Profiling_Android_Applications

0

Sie für die Antworten danken. Nach dem Lesen denke ich, dass ich mit allem einverstanden bin, besonders mit SapphireSun. Als ich die beiden Arten des Codierens sah, fragte ich mich, ob Inline irgendwelche Vor- oder Nachteile gegenüber den anderen Codierungsarten hat.

Aber soweit ich denke, ist es besser, Deklarationen wie ((TextView) findViewById (R.id.sampleTextView)) zu verwenden. SetText ("Hallo Welt"); anstatt es einer temporären Variablen zuzuweisen, da dies eine Objektreferenz erhöhen würde, bei der Garbage Collection erfasst wird, wenn GC aktiviert ist. Aber mit der obigen Deklaration denke ich, dass es keine Beteiligung eines solchen Objekts für GC gibt.

Bitte korrigieren Sie mich, wenn ich falsch liege.