Introduction
SharePreference
Utilisé pour enregistrer des données de paires clé-valeur relativement petites .
Il est souvent utilisé pour enregistrer les informations de connexion, l'état de la page de guide, l'état des informations de réglage (activer ou non la notification), etc. Faites attention à la sécurité des informations et ne stockez pas d'informations sensibles, telles que les mots de passe des comptes d'utilisateurs.
- utilisation de base
- 1.1
sharedPreference
Objet de déclaration - 1.2 Stocker les données
- 1.3 Extraire des données
- 1.4 Supprimer des données
- 1.1
- Comment afficher
SharePreference
les fichiers enregistrés ? - Précautions
- Résumer
- questions d'entrevue courantes
- matériel
utilisation de base
1.1 sharedPreference
Objet de déclaration
//在 Context 中使用 , 需要传入文件名
val sp = activity?.getSharedPreferences(
"spFileName", Context.MODE_PRIVATE)
//在 Activity 中使用,会默认生成一个和当前 Activity 相关的文件名
val sp = activity?.getPreferences(Context.MODE_PRIVATE)
Utilisez généralement la méthode contextuelle pour obtenir sharedPreference
l'objet **
Que signifie le deuxième paramètre ?
@IntDef(flag = true, prefix = {
"MODE_" }, value = {
MODE_PRIVATE,//私有文件
MODE_WORLD_READABLE,//可读文件
MODE_WORLD_WRITEABLE,//可读文件
MODE_MULTI_PROCESS,//多进程模式
})
@Retention(RetentionPolicy.SOURCE)
public @interface PreferencesMode {
}
Actuellement, seul MODE_PRIVATE est disponible, les autres sont obsolètes.
** MODE_WORLD_READABLE , MODE_WORLD_WRITEABLE ** remplacé par FileProvider
** MODE_MULTI_PROCESS ** ne fonctionne pas de manière fiable dans certaines versions d'Android et ne fournit aucun mécanisme pour coordonner les modifications simultanées entre les processus. Les applications ne doivent pas tenter de l'utiliser. Au lieu de cela, ils doivent utiliser des méthodes explicites de gestion des données inter-processus telles que ContentProvider.
1.2 Stocker les données
2 façons de soumettre
//同步提交,会同步写入磁盘,在需要等待结果的场景可以使用
//避免在主线程调用,它可能会导致页面卡顿
sp.edit().putString(key, value).commit()
//异步提交,会先更新到内存,然后异步存储到磁盘
sp.edit().putString(key, value).apply()
Le type de données stockées
String
Int
Boolean
Float
Long
StringSet
1.3 Extraire des données
//没有存储值的情况下,会返回 defValue
sp.getString(key,defValue)
1.4 Supprimer des données
//清空所有数据
sp.edit().clear()
//移除指定Key的数据
sp.edit().remove(String s)
Comment afficher SharePreference
les fichiers enregistrés ?
Utilisation de l'explorateur de fichiers d'appareils d'Android Studio
/data/data/APP package name/shared_prefs/file name.xml
Précautions
- Ne prend pas en charge le multi-processus
- Ne stockez pas d'informations sensibles en texte brut, faible sécurité
- Ne stockez pas de grandes clés et valeurs, ce qui augmentera le risque de décalage
- Les clés de différentes entreprises peuvent être stockées dans différents fichiers pour réduire la taille du fichier.
Plus le fichier est volumineux, plus le risque de bégaiement est élevé
- Fusionner le contenu de la soumission, vous pouvez soumettre plusieurs modifications en même temps, partager une application ()
sp est entièrement mis à jour et les commits de fusion peuvent réduire le nombre de modifications
- Essayez de ne pas stocker de fichiers json complexes
J'ai rencontré le fichier sp où le json qui met en cache la liste entière existe
Résumer
SharePreference
Il convient au stockage de données de paires clé-valeur relativement petites et ne prend pas en charge les processus multiples. Dans les cas graves, cela provoquera une ANR, alors faites attention à ne pas stocker de données volumineuses. Si vous avez besoin de prendre en charge plusieurs processus, veuillez l'utiliser DataStore
, DataStore
qui peut être complètement remplacé à l'heure actuelle SharePreference
. Alors cet article est aussi un record SharePreference
du début à l'abandon !
questions d'entrevue courantes
1. Quelle est la différence entre commit() et apply() ?
2. Comment sharePreference prend-il en charge le multi-processus ?
3. Pourquoi sharePreference provoque-t-il une ANR ?
4. Comment résoudre le problème ANR de sharePreference ?