setBackgroundResource(0) peut supprimer la couleur d'arrière-plan de View
Resources.getSystem().getDisplayMetrics().density Vous pouvez obtenir la densité de l'écran sans utiliser Context
En surchargeant ViewGroup dispatchDraw peut implémenter un simple effet de masque. Par exemple, lorsque vous déroulez pour actualiser, vous pouvez ajouter une couche de masque à contentView. canvas.drawRect(0, mContentView.getTranslationY(), getWidth(), getHeight(), mMaskPaint);
new View peut utiliser View.generateViewId() (disponible pour l'API 17 ou supérieur) pour générer un identifiant, le système Garanti d'être unique
Lors de l'utilisation de GridView, l'effet est meilleur lorsque vous utilisez Android:padding et Android:clipToPadding="false" ensemble.
Dans le fichier de mise en page, s'il s'agit uniquement d'un espace réservé, vous pouvez utiliser Espace pour remplacer View. La meilleure chose est que Space peut ignorer le processus de dessin.
TypedValue.applyDimension (unité int, valeur flottante, métriques DisplayMetrics) facilite la conversion entre dp, px, sp.
Activity.startActivities() La compréhension la plus directe de cette méthode est d'utiliser l'intention pour ouvrir plusieurs activités
TextUtils.isEmpty() Si la chaîne entrante est NULL ou que la longueur est 0, elle sera renvoie vrai.
Html.fromHtml() Si vous êtes familier avec HTML, vous pouvez gérer rapidement certaines opérations de texte enrichi grâce à cette méthode. Par exemple, traitement des hyperliens et mise en page graphique et texte.
TextView.setError() Définir un rappel d'erreur dans la zone de texte
Build.VERSION_CODES Parfois, notre application doit effectuer différentes opérations selon les différentes versions du SDK
PhoneNumberUtils.convertKeypadLettersToDigits Cette méthode est simple et brut. Il convertira les lettres saisies en chiffres selon le mappage sur le clavier.
ArgbEvaluator ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue); Génère une nouvelle couleur basée sur une valeur de couleur de début, une valeur de couleur de fin et un décalage, obtenant quelque chose de similaire au bas de WeChat en quelques minutes. Dégradé de couleur coulissant à barre.
ValueAnimator.reverse() Annuler en douceur l'effet d'animation
DateUtils.formatDateTime()) Cette méthode peut générer l'heure ou la date formatée correspondante
Paire Cette classe peut être utilisée Pour stocker un "ensemble" de données. Mais ce n’est pas la relation entre clé et valeur.
SparseArray Actuellement, de nombreux endroits utilisent SparseArray pour remplacer hashMap du point de vue de l'optimisation des performances afin d'économiser de la mémoire et d'améliorer les performances.
Linkify.addLinks() Cette classe facilite l'ajout d'hyperliens au texte.
La classe android.media.ThumbnailUtils est principalement utilisée pour gérer les travaux liés aux vignettes, tels que : utilisé pour obtenir des vignettes de médias (images, vidéos);
Bitmap.extractAlpha () ; Renvoie un nouveau Bitmap, capturant la valeur alpha de l'image d'origine. Parfois, nous devons modifier dynamiquement l'image d'arrière-plan d'un élément et ne souhaitons pas utiliser plusieurs images. Grâce à cette méthode, combinée à Canvas et Paint, nous pouvons modifier dynamiquement la couleur d'un Bitmap de couleur unie.
Lorsque des messages doivent être transmis entre les modules, utilisez LocalBroadcastManager au lieu de Listener pour découpler les modules. En plus du découplage, l'envoi et l'exécution des messages sont séparés par un cycle de thread, ce qui peut réduire la chaîne d'appel de méthode. J'ai rencontré un problème StackOverflow lorsque la chaîne d'appel de méthode était trop longue.
Les variables statiques ne doivent pas faire référence directement ou indirectement à une activité, un service, etc. Cela empêchera l'activité et tous les objets auxquels elle fait référence d'être libérés. Ensuite, à mesure que l'utilisateur travaille pendant une longue période, la mémoire montera en flèche.
L'une des caractéristiques du mécanisme Handler est qu'il ne se terminera pas à la fin du cycle de vie de l'activité et du service. En d'autres termes, si vous publiez un Delay Runnable puis quittez l'activité avant que le Runnable ne soit exécuté, le Runnable sera toujours exécuté une fois le temps écoulé. Si le Runnable contient une opération pour mettre à jour la vue, le programme se bloque.
Beaucoup de gens aiment utiliser Context.runOnUiThread lors de la mise à jour des vues dans les threads enfants. Cette méthode présente un inconvénient, c'est-à-dire qu'une fois le cycle de vie du contexte terminé, par exemple lorsque l'activité a été détruite, elle plantera. dès qu'on l'appelle.
SharedPreferences.Editor.commit Cette méthode est synchrone et ne reviendra pas tant que les données ne seront pas synchronisées avec Flash. L'opération IO est incontrôlable, essayez donc d'utiliser la méthode apply à la place. apply n'est pris en charge que dans le niveau API> = 9 et doit être compatible. Cependant, le dernier package de support v4 s'en est déjà occupé pour nous, utilisez simplement SharedPreferencesCompat.EditorCompat.getInstance().apply(editor).
PackageManager.getInstalledPackages Cette méthode est souvent utilisée. Vous ne savez peut-être pas que lorsque le nombre de résultats obtenus est relativement important, son appel peut prendre quelques secondes, alors essayez de l'utiliser dans un fil enfant. utilisé dans. De plus, s'il y a trop de résultats et dépassent la limite supérieure de transmission maximale de données Binder définie par le système, une TransactionException se produira. Si vous utilisez cette méthode pour obtenir la liste des applications installées sur la machine, il est préférable de le faire. prendre des précautions.
Si vous utilisez Context.startActivity pour démarrer une application externe, il est préférable de procéder à une prévention des exceptions, car si l'application correspondante est introuvable, une exception sera levée. Si vous souhaitez ouvrir une activité dans l'application, vous souhaiterez peut-être utiliser une intention explicite, ce qui peut améliorer l'efficacité de la recherche du système pour l'activité cible.
Le cycle de vie de l'Application est le cycle de vie du processus. L'application ne sera détruite que lorsque le processus sera arrêté. Même si aucune activité ou service n'est en cours d'exécution, l'application existera. Par conséquent, afin de réduire la pression sur la mémoire, essayez de ne pas référencer des objets volumineux, du contexte, etc. dans l'application.
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); La méthode plein écran doit être appelée après setContentView
Le setCurrentItem de viewpager doit être appelé après. la méthode setAdapter. Cela aura un effet.
Déterminez si le téléphone est en mode avion boolean isEnabled = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1. ;
Traverse La meilleure façon d'utiliser HashMap
public static void printMap(Map mp) { for (Map.Entry m : mp.entrySet()) { System.out.println(m.getKey() + ":" + m.getValue()); } }
Générer des nombres entiers aléatoires dans une plage à l'aide de Java
public static int randInt(int min, int max) { Random rand = new Random(); int randomNum = rand.nextInt((max - min) + 1) + min; return randomNum; }
Si la sous-classe implémente l'interface Serialisable et le Ce n'est pas le cas de la classe parent, la classe parent ne sera pas sérialisée, mais à ce stade, la classe parent doit avoir un constructeur sans paramètre, sinon une InvalidClassException sera levée.
Les variables modifiées par mot clé transient peuvent limiter la sérialisation.
Lorsque vous utilisez TabPageIndicator de Jake Wharton, si vous devez d'abord effectuer des opérations fastidieuses, puis afficher TabPageIndicator, vous devez d'abord définir mIndirector.setVisibility(View.GONE), puis mIndirector après le temps ; la tâche consommatrice est terminée. setVisibility(View.VISIBLE); Sinon, une erreur sera signalée
La séquence d'appel entre l'héritage de classe : membres statiques de la classe parent -> et bloc d'initialisation -> Méthode de construction de la classe parent -> Initialisation des membres ordinaires de la sous-classe et bloc d'initialisation -> Méthode de construction de la sous-classe
Le téléphone mobile Huawei ne peut pas afficher la solution de journalisation (*#*#2846579). #*#*) Le menu Service apparaîtra. Allez dans « Menu Projet » -> « Paramètres d'arrière-plan » -> « Paramètres du journal » Ouvrez « Commutateur de journal » et réglez-le sur ON. Ouvrez « Paramètres du niveau de journal » et définissez le journal. niveau que vous souhaitez.
Les services d'arrière-plan apparaissent souvent en raison de redémarrages, etc. Le paramètre passé par Intent dans onStartCommand() est nul. Modifiez la valeur de retour dans onStartCommand() pour renvoyer super.onStartCommand(intent, Service. .START_REDELIVER_INTENT, startId); peut résoudre le problème. Voici la signification de plusieurs drapeaux
PopupWindow et Dialog ne peuvent pas être affichés lorsque l'activité n'est pas entièrement affichée
N'utilisez pas SharedPreferences pour partager des données entre plusieurs Bien que cela soit possible (MODE_MULTI_PROCESS), c'est extrêmement instable
Pour plus d'articles liés à certaines méthodes utiles dans le développement Android que vous ne connaissez pas, veuillez faire attention au site Web PHP chinois !