[Persistance des données] Guide SharePreference

Introduction

SharePreferenceUtilisé 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 sharedPreferenceObjet de déclaration
    • 1.2 Stocker les données
    • 1.3 Extraire des données
    • 1.4 Supprimer des données
  • Comment afficher SharePreferenceles fichiers enregistrés ?
  • Précautions
  • Résumer
  • questions d'entrevue courantes
  • matériel

utilisation de base

1.1 sharedPreferenceObjet 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 sharedPreferencel'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 SharePreferenceles 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

SharePreferenceIl 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, DataStorequi peut être complètement remplacé à l'heure actuelle SharePreference. Alors cet article est aussi un record SharePreferencedu 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 ?

matériel

Je suppose que tu aimes

Origine blog.csdn.net/Android_yh/article/details/130093994
conseillé
Classement