setBackgroundResource(0) kann die Hintergrundfarbe von View entfernen
Resources.getSystem().getDisplayMetrics().density Sie können die Bildschirmdichte erhalten, ohne Kontext zu verwenden
Durch Überladen von ViewGroup DispatchDraw kann einen einfachen Maskeneffekt implementieren. Wenn Sie beispielsweise zum Aktualisieren nach unten ziehen, können Sie der ContentView eine Maskenebene hinzufügen. canvas.drawRect(0, mContentView.getTranslationY(), getWidth(), getHeight(), mMaskPaint);
new View kann View.generateViewId() (verfügbar für API 17 oder höher) verwenden, um eine ID zu generieren, das System Garantiert einzigartig sein
Bei Verwendung von GridView ist der Effekt besser, wenn android:padding und android:clipToPadding="false" zusammen verwendet werden.
Wenn es sich in der Layoutdatei nur um einen Platzhalter handelt, können Sie die Leertaste verwenden, um die Ansicht zu ersetzen. Das Beste ist, dass Space den Zeichenvorgang überspringen kann.
TypedValue.applyDimension(int-Einheit, Float-Wert, DisplayMetrics-Metriken) erleichtert die Konvertierung zwischen dp, px, sp.
Activity.startActivities() Das direkteste Verständnis dieser Methode besteht darin, die Absicht zu verwenden, um mehrere Aktivitäten zu öffnen.
TextUtils.isEmpty() Wenn der eingehende String NULL oder die Länge 0 ist, wird dies der Fall sein Rückkehr true .
Html.fromHtml() Wenn Sie mit HTML vertraut sind, können Sie mit dieser Methode schnell einige Rich-Text-Vorgänge ausführen. Zum Beispiel die Verarbeitung von Hyperlinks und das Layout von Grafiken und Texten.
TextView.setError() Textfeld-Fehlererinnerung festlegen
Build.VERSION_CODES Manchmal muss unsere App je nach SDK-Version unterschiedliche Vorgänge ausführen
PhoneNumberUtils.convertKeypadLettersToDigits Diese Methode ist einfach und grob und wandelt die eingegebenen Buchstaben entsprechend der Zuordnung auf der Tastatur in Zahlen um.
ArgbEvaluator ArgbEvaluator.evaluate(float crime, Object startValue, Object endValue); Generieren Sie eine neue Farbe basierend auf einem Startfarbwert, einem Endfarbwert und einem Offset und erreichen Sie so in wenigen Minuten etwas Ähnliches wie den unteren Teil von WeChat Schiebender Farbverlauf der Leiste.
ValueAnimator.reverse() Den Animationseffekt reibungslos abbrechen
DateUtils.formatDateTime()) Diese Methode kann die entsprechende formatierte Uhrzeit oder das entsprechende formatierte Datum ausgeben
Paar Diese Klasse kann verwendet werden Um einen „Satz“ von Daten zu speichern. Aber es ist nicht die Beziehung zwischen Schlüssel und Wert.
SparseArray Derzeit gibt es viele Orte, an denen SparseArray verwendet wird, um hashMap aus Sicht der Leistungsoptimierung zu ersetzen, um Speicher zu sparen und die Leistung zu verbessern.
Linkify.addLinks() Diese Klasse erleichtert das Hinzufügen von Hyperlinks zu Text.
Die android.media.ThumbnailUtils-Klasse wird hauptsächlich für Arbeiten im Zusammenhang mit Miniaturansichten verwendet, z. B. zum Abrufen von Miniaturansichten von Medien (Bildern, Videos);
Bitmap.extractAlpha () ; Gibt eine neue Bitmap zurück, die den Alphawert des Originalbilds erfasst. Manchmal müssen wir das Hintergrundbild eines Elements dynamisch ändern und möchten nicht mehrere Bilder verwenden. Mit dieser Methode können wir in Kombination mit Canvas und Paint die Farbe einer Vollton-Bitmap dynamisch ändern.
Wenn Nachrichten zwischen Modulen übertragen werden müssen, verwenden Sie LocalBroadcastManager anstelle von Listener, um die Module zu entkoppeln. Zusätzlich zur Entkopplung sind das Senden und Ausführen von Nachrichten durch einen Thread-Zyklus getrennt, wodurch die Methodenaufrufkette verkürzt werden kann. Ich bin auf ein StackOverflow-Problem gestoßen, als die Methodenaufrufkette zu lang war.
Statische Variablen sollten weder direkt noch indirekt auf Aktivitäten, Dienste usw. verweisen. Dadurch können die Aktivität und alle Objekte, auf die sie sich bezieht, nicht freigegeben werden. Wenn der Benutzer dann längere Zeit arbeitet, steigt der Speicher sprunghaft an.
Eine Besonderheit des Handler-Mechanismus besteht darin, dass er nicht endet, wenn der Lebenszyklus von Aktivität und Dienst endet. Mit anderen Worten: Wenn Sie ein Delay Runnable veröffentlichen und dann die Aktivität beenden, bevor das Runnable ausgeführt wird, wird das Runnable nach Ablauf der Zeit weiterhin ausgeführt. Wenn das Runnable einen Vorgang zum Aktualisieren der Ansicht enthält, stürzt das Programm ab.
Viele Leute verwenden gerne Context.runOnUiThread, wenn sie Ansichten in untergeordneten Threads aktualisieren. Diese Methode hat einen Nachteil: Sobald der Kontext-Lebenszyklus endet, beispielsweise wenn die Aktivität zerstört wurde, stürzt sie ab sobald es aufgerufen wird.
SharedPreferences.Editor.commit Diese Methode ist synchron und wird erst zurückgegeben, wenn die Daten mit Flash synchronisiert sind. Der E/A-Vorgang ist nicht kontrollierbar. Versuchen Sie daher, stattdessen die Apply-Methode zu verwenden. apply wird nur in API Level>=9 unterstützt und muss kompatibel sein. Das neueste Support-v4-Paket hat dies jedoch bereits für uns erledigt. Verwenden Sie einfach SharedPreferencesCompat.EditorCompat.getInstance().apply(editor).
PackageManager.getInstalledPackages Diese Methode wird häufig verwendet. Möglicherweise wissen Sie nicht, dass der Aufruf bei einigen Modellen Sekunden dauern kann, wenn die Anzahl der erhaltenen Ergebnisse relativ groß ist. Versuchen Sie daher, sie in einem untergeordneten Thread zu verwenden verwendet in. Wenn zu viele Ergebnisse vorliegen und die vom System festgelegte Obergrenze der maximalen Binder-Datenübertragung überschritten wird, tritt am besten eine TransactionException auf. Wenn Sie diese Methode verwenden, um die Liste der auf dem Computer installierten Anwendungen abzurufen Treffen Sie Vorsichtsmaßnahmen.
Wenn Sie Context.startActivity zum Starten einer externen Anwendung verwenden, ist es am besten, Ausnahmen zu verhindern, da eine Ausnahme ausgelöst wird, wenn die entsprechende Anwendung nicht gefunden werden kann. Wenn Sie eine Aktivität innerhalb der Anwendung öffnen möchten, möchten Sie möglicherweise einen expliziten Intent verwenden, der die Effizienz der Systemsuche nach der Zielaktivität verbessern kann.
Der Lebenszyklus der Anwendung ist der Lebenszyklus des Prozesses. Die Anwendung wird nur zerstört, wenn der Prozess beendet wird. Auch wenn keine Aktivität oder kein Dienst ausgeführt wird, ist die Anwendung vorhanden. Versuchen Sie daher, in der Anwendung nicht auf große Objekte, Kontexte usw. zu verweisen, um den Speicherdruck zu verringern.
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); Die Vollbildmethode muss nach setContentView aufgerufen werden.
Das setCurrentItem von viewpager muss danach aufgerufen werden Die setAdapter-Methode hat Auswirkungen.
Bestimmen Sie, ob sich das Telefon im Flugzeugmodus befindet. boolean isEnabled = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1 ;
Traverse Der beste Weg, HashMap zu verwenden
public static void printMap(Map mp) { for (Map.Entry m : mp.entrySet()) { System.out.println(m.getKey() + ":" + m.getValue()); } }
Zufällige Ganzzahlen in einem Bereich mit Java generieren
public static int randInt(int min, int max) { Random rand = new Random(); int randomNum = rand.nextInt((max - min) + 1) + min; return randomNum; }
Wenn die Unterklasse die Serializable-Schnittstelle implementiert, aber die Wenn die übergeordnete Klasse dies nicht tut, wird die übergeordnete Klasse nicht serialisiert. Zu diesem Zeitpunkt muss die übergeordnete Klasse jedoch über einen Konstruktor ohne Parameter verfügen, andernfalls wird eine InvalidClassException ausgelöst.
Die durch das Schlüsselwort „transient“ geänderten Variablen können die Serialisierung einschränken.
Wenn Sie bei Verwendung von Jake Whartons TabPageIndicator zuerst einige zeitaufwändige Vorgänge ausführen und dann den TabPageIndicator anzeigen müssen, müssen Sie zuerst mIndirector.setVisibility(View.GONE) und dann mIndirector nach der Zeit festlegen. Die verbrauchende Aufgabe ist abgeschlossen. setVisibility(View.VISIBLE); Andernfalls wird ein Fehler gemeldet.
Aufrufsequenz zwischen statischen Mitgliedern der übergeordneten Klasse -> Block -> Konstruktionsmethode der übergeordneten Klasse -> Unterklassen-Konstruktionsmethode
Das Huawei-Mobiltelefon kann keine Protokolllösung anzeigen (*#*#2846579#* #*) Das Service-Menü wird angezeigt. Gehen Sie zu „Projektmenü“ -> Wunsch.
Hintergrunddienste erscheinen häufig aufgrund von Neustarts und dergleichen. Der von Intent in onStartCommand() übergebene Parameter ist null. Ändern Sie den Rückgabewert in onStartCommand(), um super.onStartCommand(intent, Service.START_REDELIVER_INTENT) zurückzugeben , startId); kann das Problem lösen. Hier sind die Bedeutungen mehrerer Flags
PopupWindow und Dialog können nicht angezeigt werden, wenn die Aktivität nicht vollständig angezeigt wird
Verwenden Sie SharedPreferences nicht, um Daten zwischen mehreren auszutauschen Obwohl dies möglich ist (MODE_MULTI_PROCESS), ist es äußerst instabil
Weitere Artikel zu einigen nützlichen Methoden in der Android-Entwicklung, die Sie nicht kennen, finden Sie auf der chinesischen PHP-Website!