Die 10 häufigsten Fehler, die Android-Entwickler machen: Ein Programmier-Tutorial

Veröffentlicht: 2022-03-11

Android. Was ist an dieser Plattform nicht zu mögen? Es ist kostenlos, anpassbar, wächst schnell und ist nicht nur auf Ihrem Telefon oder Tablet verfügbar, sondern auch auf Ihrer Smartwatch, Ihrem Fernseher und Ihrem Auto.

Mit dem neuesten Lollipop-Update wird die Android-Programmierung weiter verbessert. Die Plattform ist seit der ersten AOSP-Veröffentlichung ziemlich gereift und hat die Erwartungen der Benutzer ziemlich hoch gelegt. Schauen Sie, wie gut das neue Materialdesignmuster aussieht!

Es gibt Tausende verschiedener Geräte mit unterschiedlichen Bildschirmgrößen, Chiparchitekturen, Hardwarekonfigurationen und Softwareversionen. Leider ist die Segmentierung der Preis für Offenheit, und es gibt Tausende von Möglichkeiten, wie Ihre App auf verschiedenen Geräten versagen kann, selbst als fortgeschrittener Android-Programmierer.

Ungeachtet dieser enormen Segmentierung werden die meisten Fehler tatsächlich aufgrund von Logikfehlern eingeführt. Diese Fehler können leicht verhindert werden, solange wir die Grundlagen richtig machen!

Hier ist ein Android-Programmier-Tutorial, das die 10 häufigsten Fehler anspricht, die Android-Entwickler machen.

Lernen Sie mit diesem Tutorial die Android-Programmierung auf einem fortgeschritteneren Niveau.

Häufiger Fehler Nr. 1: Entwickeln für iOS

Zu meiner großen Freude ist dieser Android-Fehler heutzutage weitaus seltener (teilweise, weil die Kunden allmählich erkennen, dass die Zeiten, in denen Apple alle Designstandards gesetzt hat, längst vorbei sind). Trotzdem sehen wir hin und wieder eine App, die ein iOS-Klon ist.

Verstehen Sie mich nicht falsch, ich bin kein Evangelist der Android-Programmierung! Ich respektiere jede Plattform, die die mobile Welt einen Schritt nach vorne bringt. Aber es ist 2014 und die Benutzer verwenden Android schon seit geraumer Zeit und haben sich an die Plattform gewöhnt. Ihnen iOS-Designstandards aufzuzwingen, ist eine schreckliche Strategie!

Es sei denn, es gibt einen sehr guten Grund, gegen die Richtlinien zu verstoßen, tun Sie es nicht. (Google tut dies ständig, aber niemals durch Kopieren und Einfügen.)

Hier sind einige der häufigsten Beispiele für diesen Android-Fehler:

  1. Sie sollten keine statischen Registerkarten erstellen, und sie gehören nicht nach unten (ich zeige auf Ihr Instagram).
  2. Systembenachrichtigungssymbole sollten keine Farbe haben.
  3. App-Symbole sollten nicht in einem abgerundeten Rechteck platziert werden (es sei denn, das ist Ihr tatsächliches Logo, z. B. Facebook).
  4. Begrüßungsbildschirme sind über die anfängliche Einrichtung/Einführung hinaus redundant. Verwenden Sie sie nicht in anderen Szenarien.
  5. Listen sollten keine Caretzeichen haben.

Dies sind nur einige der vielen anderen kleinen Dinge, die die Benutzererfahrung ruinieren können.

Häufiger Fehler Nr. 2: Entwickeln für Ihr Android-Gerät

Wenn Sie keine Kiosk-/Promo-App für ein einzelnes Tablet erstellen, wird Ihre Android-App wahrscheinlich nicht auf jedem Gerät gut aussehen. Hier sind ein paar Android-Programmiertipps, die Sie sich merken sollten:

  • Dichteunabhängige Pixel (dp) unterscheiden sich von normalen Pixeln (px).
  • Ressourcen sind mehrfach enthalten, um unterschiedliche Dichten und Ausrichtungen zu berücksichtigen.
  • Drawables mit 9 Patches werden so gestreckt, dass sie auf den Bildschirm passen.

Es gibt buchstäblich Tausende möglicher Szenarien, aber nach einer Weile entwickelt man ein Gespür dafür, sie alle mit einer Handvoll Fällen abzudecken.

Sie besitzen nicht Tausende von Geräten? Kein Problem. Der Android-Emulator ist super gut darin, physische Geräte zu replizieren. Noch besser, probieren Sie Genymotion aus, es ist blitzschnell und wird mit vielen verschiedenen beliebten voreingestellten Geräten geliefert.

Haben Sie auch versucht, Ihr Gerät zu drehen? Die Hölle kann losbrechen …

Häufiger Fehler Nr. 3: Keine Intents verwenden

Absichten sind eine der Schlüsselkomponenten von Android. Es ist eine Möglichkeit, Daten zwischen verschiedenen Teilen der App oder, noch besser, verschiedenen Apps auf dem System zu übertragen.

Angenommen, Sie haben eine Galerie-App, die einen Download-Link zu einigen Bildern per SMS teilen kann. Welche der beiden Möglichkeiten erscheint logischer?

Option 1:

  • Fordern Sie die SEND_SMS-Berechtigung an.

     <uses-permission android:name="android.permission.SEND_SMS" />
  • Schreiben Sie mit dem SmsManager Ihren eigenen Code zum Versenden von SMS.
  • Erklären Sie Ihren Benutzern, warum Ihre Galerie-App Zugriff auf Dienste benötigt, die Geld kosten können, und warum sie diese Berechtigung erteilen müssen, um Ihre App zu verwenden.

Option 2:

  • Starten Sie eine SMS-Intent und lassen Sie eine für SMS entwickelte App die Arbeit erledigen

     Intent sendIntent = new Intent(Intent.ACTION_VIEW); sendIntent.setData(Uri.parse("sms:" + telephoneNumber)); sendIntent.putExtra("sms_body", x); startActivity(sendIntent);

Falls Sie irgendwelche Zweifel haben, ist die beste Lösung Option 2!

Dieser Ansatz lässt sich auf fast alles anwenden. Teilen von Inhalten, Aufnehmen von Bildern, Aufnehmen von Videos, Auswählen von Kontakten, Hinzufügen von Ereignissen, Öffnen von Links mit nativen Apps usw.

Verwenden Sie für diese Szenarien immer Intents, es sei denn, es gibt einen guten Grund für eine benutzerdefinierte Implementierung (z. B. eine Kamera, die Filter anwendet). Dadurch sparen Sie viel Programmierzeit und entfernen die AndroidManifest.xml von unnötigen Berechtigungen.

Häufiger Fehler Nr. 4: Keine Fragmente verwenden

Vor einiger Zeit hat Android in Honeycomb das Konzept der Fragmente eingeführt. Betrachten Sie sie als separate Bausteine ​​mit eigenen (ziemlich komplexen) Lebenszyklen, die innerhalb einer Aktivität existieren. Sie helfen sehr bei der Optimierung für verschiedene Bildschirme, sie werden einfach von ihrer übergeordneten Aktivität verwaltet, können wiederverwendet, kombiniert und beliebig positioniert werden.

Das Starten einer separaten Aktivität für jeden App-Bildschirm ist äußerst ineffizient, da das System versucht, sie so lange wie möglich im Speicher zu halten. Wenn Sie einen töten, werden die Ressourcen, die von den anderen verwendet werden, nicht freigegeben.

Dieses Tutorial zur Android-Programmierung empfiehlt die richtige Verwendung von Fragmenten, um Ihre App effizienter zu machen.

Wenn Sie nicht tief in den Android-Kern eintauchen und diesen Artikel lesen möchten, der sich gegen die Verwendung von Fragmenten ausspricht, sollten Sie nach Möglichkeit Fragmente verwenden. Es besagt im Grunde, dass Fragmente und Cursor-Loader einen guten Zweck haben, aber eine schlechte Implementierung.

Häufiger Fehler Nr. 5: Blockieren des Hauptthreads

Der Haupt-Thread hat einen einzigen Zweck: die Benutzeroberfläche reaktionsfähig zu halten.

Obwohl die Wissenschaft hinter der Messung der Framerate, die unser Auge/Gehirn wahrnehmen kann, komplex ist und von vielen Faktoren beeinflusst wird, gilt als allgemeine Regel, dass alles unter 24 fps mit einer Verzögerung von mehr als 100 ms nicht als flüssig empfunden wird.

Dies bedeutet, dass die Aktionen des Benutzers eine verzögerte Rückmeldung erhalten und die von Ihnen programmierte Android-App nicht mehr reagiert. Dem Benutzer die Kontrolle über die App zu entziehen, führt zu Frustration, frustrierte Benutzer neigen dazu, sehr negatives Feedback zu geben.

Schlimmer noch, wenn der Haupt-Thread für eine Weile blockiert ist (5 Sekunden für Aktivitäten, 10 für Broadcast-Empfänger), tritt ANR auf.

Wenn Sie die Android-Programmierung lernen, werden Sie diese Botschaft kennen und fürchten. Befolgen Sie diese Android-Programmiertipps, um dieses Auftreten zu minimieren.

Dies war in Android 2.x so üblich, dass das System in neueren Versionen keine Netzwerkanrufe im Hauptthread zulässt.

Um das Blockieren des Haupt-Threads zu vermeiden, verwenden Sie immer Worker-/Hintergrund-Threads für: 1. Netzwerkaufrufe 2. Bitmap-Laden 3. Bildverarbeitung 4. Datenbankabfragen 5. SD-Lesen/Schreiben

Häufiger Fehler Nr. 6: Das Rad neu erfinden

„OK, ich werde den Hauptfaden nicht verwenden. Ich schreibe meinen eigenen Code, der in einem Hintergrund-Thread mit meinem Server kommuniziert.“

Nein! Bitte tun Sie das nicht! Netzwerkaufrufe, Laden von Bildern, Datenbankzugriff, JSON-Parsing und soziale Anmeldung sind die häufigsten Dinge, die Sie in Ihrer App tun. Nicht nur deine, jede App da draußen. Es gibt einen besseren Weg. Erinnern Sie sich, wie Android als Plattform gereift und gewachsen ist? Hier ist eine kurze Liste von Beispielen:

  1. Verwenden Sie Gradle als Build-System.
  2. Verwenden Sie Retrofit / Volley für Netzwerkanrufe.
  3. Verwenden Sie Picasso zum Laden von Bildern.
  4. Verwenden Sie Gson / Jackson für das JSON-Parsing.
  5. Verwenden Sie gängige Implementierungen für Social Login.

Wenn Sie etwas implementieren müssen, ist es wahrscheinlich bereits geschrieben, getestet und weit verbreitet. Führen Sie einige grundlegende Recherchen durch und lesen Sie einige Android-Programmiertutorials, bevor Sie Ihren eigenen Code schreiben!

Häufiger Fehler Nr. 7: Nicht von Erfolg ausgehen

Toll. Wir haben gelernt, dass es einen besseren Weg gibt, lange laufende Aufgaben zu bewältigen, und wir verwenden zu diesem Zweck gut dokumentierte Bibliotheken. Aber der Benutzer muss noch warten. Es ist unvermeidlich. Pakete werden nicht sofort gesendet, verarbeitet und empfangen. Es gibt eine Roundtrip-Verzögerung, es gibt Netzwerkausfälle, Pakete gehen verloren und Träume werden zerstört.

Aber all das ist messbar. Erfolgreiche Netzwerkanrufe sind viel wahrscheinlicher als erfolglose. Warum also auf die Antwort des Servers warten, bevor die erfolgreiche Anfrage verarbeitet wird? Es ist unendlich besser, vom Erfolg auszugehen und mit dem Scheitern umzugehen. Wenn also ein Benutzer einen Beitrag mit „Gefällt mir“ markiert, wird die Anzahl der Likes sofort erhöht, und im unwahrscheinlichen Fall, dass der Anruf fehlschlägt, wird der Benutzer benachrichtigt.

In dieser modernen Welt wird sofortiges Feedback erwartet. Die Leute warten nicht gerne. Kinder wollen nicht in einem Klassenzimmer sitzen und sich Wissen aneignen, dessen zukünftige Auszahlung ungewiss ist. Apps müssen sich der Psychologie des Benutzers anpassen.

Häufiger Fehler Nr. 8: Bitmaps nicht verstehen

Benutzer lieben Inhalte! Vor allem, wenn der Inhalt gut formatiert ist und gut aussieht. Bilder zum Beispiel sind sehr schöne Inhalte, vor allem wegen ihrer Eigenschaft, tausend Worte pro Bild zu vermitteln. Sie verbrauchen auch viel Speicher. Viel Speicher!

Bevor ein Bild auf dem Bildschirm angezeigt wird, muss es in den Speicher geladen werden. Da Bitmaps die gebräuchlichste Methode dafür sind, stellen wir für den gesamten Prozess einen Android-Programmierleitfaden zur Verfügung:

Angenommen, Sie möchten ein Bild auf Ihrem Bildschirm anzeigen, das Sie gerade mit Ihrer Kamera aufgenommen haben. Der dafür benötigte Gesamtspeicher errechnet sich mit folgender Formel: memory_needed_in_bytes = 4 * image_width * image_height;

Warum 4? Nun, die gebräuchlichste/empfohlene Bitmap-Konfiguration ist ARGB_8888 . Das bedeutet, dass wir für jedes Pixel, das wir zeichnen, 8 Bits (1 Byte) für den Alpha-, den Rot-, den Gier- und den Blaukanal im Speicher behalten müssen, um es richtig anzuzeigen. Es gibt Alternativen, wie die RGB_565 Konfiguration, die halb so viel Speicher benötigt wie ARGB_8888 , aber die Transparenz und die Farbpräzision verliert (während möglicherweise ein grüner Farbton hinzugefügt wird).

Nehmen wir an, Sie haben ein brandneues Gerät mit Full-HD-Bildschirm und 12-MP-Kamera. Das soeben aufgenommene Bild ist 4000 x 3000 Pixel groß und der Gesamtspeicherbedarf für die Anzeige beträgt: 4 bytes * 4000 * 3000 = 48 MB

48 Megabyte RAM nur für ein einzelnes Bild!? Das ist eine Menge!

Betrachten wir nun die Bildschirmauflösung. Sie versuchen, ein 4000x3000-Bild auf einem Bildschirm mit 1920x1080 Pixel anzuzeigen. Im schlimmsten Fall (Anzeige des Bildes im Vollbildmodus) sollten Sie nicht mehr als 4 * 1920 * 1080 = 8.3 MB Speicher zuweisen.

Befolgen Sie immer die Programmiertipps für Android, um Bitmaps effizient anzuzeigen:

  1. Messen Sie die Ansicht, in der Sie Ihre Bilder zeigen.
  2. Skalieren / beschneiden Sie das große Bild entsprechend.
  3. Nur anzeigen, was angezeigt werden kann.

Häufiger Fehler Nr. 9: Deep-View-Hierarchie verwenden

Layouts haben eine XML-Darstellung in Android. Um Inhalte zu zeichnen, muss das XML geparst, der Bildschirm ausgemessen und alle Elemente entsprechend platziert werden. Es ist ein ressourcen- und zeitaufwändiger Prozess, der optimiert werden muss.

So funktioniert die ListView (und neuerdings auch die RecyclerView).

Wenn ein Layout einmal aufgeblasen wurde, verwendet das System es wieder. Aber trotzdem muss das Layout irgendwann aufgeblasen werden.

Angenommen, Sie möchten ein 3x3-Raster mit Bildern erstellen. Eine Möglichkeit, dies zu tun, ist ein vertikales LinearLayout , das 3 LinearLayout s mit gleicher Gewichtung enthält, von denen jede 3 ImageViews mit gleicher Gewichtung enthält.

Einige Anfänger in der Android-Programmierung nutzen LinearLayouts nicht immer optimal.

Was bekommen wir mit diesem Ansatz? Eine Warnung, dass „verschachtelte Gewichtungen schlecht für die Leistung sind“.

Es gibt ein Sprichwort in der Android-Programmierwelt, das ich mir gerade ausgedacht habe: „Mit wenig Aufwand lassen sich alle Hierarchien abflachen“ .

In diesem Fall ersetzen RelativeLayout oder GridLayout effizient die verschachtelten LinearLayouts .

Häufiger Fehler Nr. 10: Die minSdkVersion nicht auf 14 setzen

Nun, das ist kein Fehler, aber es ist schlechte Praxis.

Android 2.x war ein großer Meilenstein bei der Entwicklung dieser Plattform, aber einige Dinge sollten zurückgelassen werden. Die Unterstützung älterer Geräte erhöht die Komplexität der Codewartung und schränkt den Entwicklungsprozess ein.

Die Zahlen sind eindeutig, die Nutzer sind weitergezogen, die Entwickler sollten nicht zurückbleiben.

Mir ist bewusst, dass dies für einige große Märkte mit alten Geräten (z. B. Indien) nicht gilt, und das Festlegen der minSdkVersion auf 14 in der Facebook-App bedeutet, dass einige Millionen Benutzer ohne ihr bevorzugtes soziales Netzwerk bleiben. Wenn Sie jedoch neu anfangen und versuchen, Ihren Benutzern ein schönes Erlebnis zu bieten, sollten Sie die Vergangenheit beseitigen. Benutzer, die nicht über die Ressourcen verfügen oder das Bedürfnis verspüren, ihr Gerät/Betriebssystem zu aktualisieren, haben nicht den Anreiz, eine bessere Version Ihrer Android-App auszuprobieren und letztendlich Geld dafür auszugeben.

Einpacken

Android ist eine leistungsstarke Plattform, die sich schnell weiterentwickelt. Es mag nicht vernünftig sein, von den Benutzern zu erwarten, dass sie mithalten, aber es ist von entscheidender Bedeutung, dass die Android-Entwickler dies tun.

Zu wissen, dass Android nicht nur auf unseren Telefonen oder Tablets vorhanden ist, ist noch wichtiger. Es ist an unseren Handgelenken, in unseren Wohnzimmern, in unseren Küchen und in unseren Autos. Es ist von größter Bedeutung, die Grundlagen richtig zu machen, bevor wir mit der Expansion beginnen.