2013-08-23 3 views
1

J'utilise SharedPreferences, pour stocker le contenu de mon jeu, comme itens que vous avez, votre or actuel, itens équipé et etc.SharedPreferences prenant trop de mémoire de tas

Sans car en utilisant les SharedPreferences que je reçois 25 à 27 Mo tas , mais quand je l'utilise, j'obtiens un tas de 32 Mo, ça augmente de 5 Mo. Est-ce normal ou est-ce que je fais quelque chose de mal?

package Util; 
import android.app.Activity; 

public class StorageInfo { 
    public static StorageInfoHelper storage; 
    public Activity _context; 
    public StorageInfo (Activity context){ 
     _context = context; 
     storage = new StorageInfoHelper(_context); 
     storage.reset(); 
    } 
} 

package Util; 

import android.app.Activity; 
import android.content.SharedPreferences; 


public class StorageInfoHelper { 
    public static final String GoldKEY = "Gold"; 
    public static final String EquipedItensKEY = "EquipedItens"; 
    public static final String MyHeadItensKEY = "MyHeadItens"; 
    public static final String MyPowerUpItensKEY = "MyPowerUpItens"; 
    public static final String MyBodyItensKEY = "MyBodyItens"; 
    public static final String MyBoardItensKEY = "MyBoardItens"; 
    public static final String splitDefault = ","; 
    public static final String goldDefault = "0"; 
    public static final String itenDefault = "0"; 
    public static final String equipItensDefault = "0,0,0,0"; 
    private static final int headCNT = 0; 
    private static final int PowerUpCNT = 1; 
    private static final int bodyCNT = 2; 
    private static final int boardCNT = 3; 
    private String myHead = new String(); 
    private String myPowerUp = new String(); 
    private String myBoard = new String(); 
    private String myBody = new String(); 
    private String myEquipedHead = new String(); 
    private String myEquipedPowerUp = new String(); 
    private String myEquipedBoard = new String(); 
    private String myEquipedBody = new String(); 
    private String myEquipedItens = new String(); 
    private SharedPreferences settings; 
    private SharedPreferences.Editor editor; 
    private Activity context; 

    public StorageInfoHelper (Activity mycontext){ 
     context = mycontext; 
    } 

    private SharedPreferences getPreferences(){ 
     synchronized (StorageInfoHelper.class){ 
      if (settings != null){ 
       return settings; 
      }else { 
       settings = context.getPreferences(0); 
       return settings; 
      } 
     } 
    } 

    private SharedPreferences.Editor getEditor(){ 
     synchronized (StorageInfoHelper.class){ 
      if (editor != null){ 
       return editor; 
      }else { 
       editor = getPreferences().edit(); 
       return editor; 
      } 
     } 
    } 

    protected String getStoredFiles(String key){ 
     // Restore preferences 
     return settings.getString(key, new String()); 
    } 

    protected void saveStoredFiles(String key, String value){ 
     // We need an Editor object to make preference changes. 
     // All objects are from android.context.Context 
     getEditor().putString(key, value); 

     // Commit the edits! 
     getEditor().commit(); 
    } 

    public String getMyGold(){ 
     return getPreferences().getString(GoldKEY, goldDefault); 
    } 

    public String addGold (int value){ 
     getEditor().putString(GoldKEY, String.valueOf(Long.decode(getMyGold()) + value)); 
     getEditor().commit(); 
     return getMyGold(); 
    } 

    public String getMyEquipedItens(){ 
     myEquipedItens = getPreferences().getString(EquipedItensKEY, equipItensDefault); 
     return myEquipedItens; 
    } 

    public void setMyEquipedItens (String equipedItens){ 
     getEditor().putString(EquipedItensKEY, equipedItens); 
     getEditor().commit(); 
     myEquipedItens = equipedItens; 
    } 

    public String getMyEquipedHead(){ 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedHead = myEquipedItens.split(splitDefault)[headCNT]; 
     return myEquipedHead; 
    } 

    public void setMyEquipedHead (String head){ 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedPowerUp = myEquipedItens.split(splitDefault)[PowerUpCNT];  
     myEquipedBody = myEquipedItens.split(splitDefault)[bodyCNT]; 
     myEquipedBoard = myEquipedItens.split(splitDefault)[boardCNT]; 
     myEquipedItens = head + splitDefault + myEquipedPowerUp + splitDefault + myEquipedBody + splitDefault + myEquipedBoard; 
     setMyEquipedItens(myEquipedItens); 
    } 

    public String getMyEquipedPowerUp(){ 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedPowerUp = myEquipedItens.split(splitDefault)[PowerUpCNT]; 
     return myEquipedPowerUp; 
    } 

    public void setMyEquipedPowerUp (String PowerUp){ 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedHead = myEquipedItens.split(splitDefault)[headCNT];   
     myEquipedBody = myEquipedItens.split(splitDefault)[bodyCNT]; 
     myEquipedBoard = myEquipedItens.split(splitDefault)[boardCNT]; 
     myEquipedItens = myEquipedHead + splitDefault + PowerUp + splitDefault + myEquipedBody + splitDefault + myEquipedBoard; 
     setMyEquipedItens(myEquipedItens); 
    } 

    public String getMyEquipedBoard(){ 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedBoard = myEquipedItens.split(splitDefault)[boardCNT]; 
     return myEquipedBoard; 
    } 

    public void setMyEquipedBoard (String board){ 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedHead = myEquipedItens.split(splitDefault)[headCNT]; 
     myEquipedPowerUp = myEquipedItens.split(splitDefault)[PowerUpCNT];  
     myEquipedBody = myEquipedItens.split(splitDefault)[bodyCNT]; 
     myEquipedItens = myEquipedHead + splitDefault + myEquipedPowerUp + splitDefault + myEquipedBody + splitDefault + board; 
     setMyEquipedItens(myEquipedItens); 
    } 

    public String getMyEquipedBody() { 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedBody = myEquipedItens.split(splitDefault)[bodyCNT]; 
     return myEquipedBody; 
    } 

    public void setMyEquipedBody (String body){ 
     myEquipedItens = getMyEquipedItens(); 
     myEquipedHead = myEquipedItens.split(splitDefault)[headCNT]; 
     myEquipedPowerUp = myEquipedItens.split(splitDefault)[PowerUpCNT];  
     myEquipedBoard = myEquipedItens.split(splitDefault)[boardCNT]; 
     myEquipedItens = myEquipedHead + splitDefault + myEquipedPowerUp + splitDefault + body + splitDefault + myEquipedBoard; 
     setMyEquipedItens(myEquipedItens); 
    } 

    public String getMyHeads(){ 
     myHead = getPreferences().getString(MyHeadItensKEY, itenDefault); 
     return myHead; 
    } 

    public void addInMyHeads (String head) { 
     myHead = getPreferences().getString(MyHeadItensKEY, itenDefault); 
     myHead = myHead + splitDefault + head; 
     getEditor().putString(MyHeadItensKEY, myHead); 
     getEditor().commit(); 
    } 

    public String getMyPowerUps(){ 
     myPowerUp = getPreferences().getString(MyPowerUpItensKEY, itenDefault); 
     return myPowerUp; 
    } 

    public void addInMyPowerUps (String PowerUp) { 
     myPowerUp = getPreferences().getString(MyPowerUpItensKEY, itenDefault); 
     myPowerUp = myPowerUp + splitDefault + PowerUp; 
     getEditor().putString(MyPowerUpItensKEY, myPowerUp); 
     getEditor().commit(); 
    } 

    public String getMyBoards(){ 
     myBoard = getPreferences().getString(MyBoardItensKEY, itenDefault); 
     return myBoard; 
    } 

    public void addInMyBoard (String board) { 
     myBoard = getPreferences().getString(MyBoardItensKEY, itenDefault); 
     myBoard = myBoard + splitDefault + board; 
     getEditor().putString(MyBoardItensKEY, myBoard); 
     getEditor().commit(); 
    } 

    public String getMyBodys(){ 
     myBody = getPreferences().getString(MyBodyItensKEY, itenDefault); 
     return myBody; 
    } 

    public void addInMybodys (String body) { 
     myBody = getPreferences().getString(MyBodyItensKEY, itenDefault); 
     myBody = myBody + splitDefault + body; 
     getEditor().putString(MyBodyItensKEY, myBody); 
     getEditor().commit(); 
    } 

    public void reset() { 
     getEditor().clear(); 
     editor.commit(); 

    } 

} 

je lance le StorageInfo, une seule fois, lorsque l'application commence:

public class Splash extends Activity { 
ImageView imgDuck; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     setContentView(R.layout.splash); 

     FadeInDuck(); 
     new StorageInfo(this); 

} 
} 

et je l'utilise de cette façon:

Util.MyTextView imgView = (Util.MyTextView) findViewById(R.id.txtCoins);  
     imgView.setText(StorageInfo.storage.getMyGold()); 

Je suis appeler cela depuis différents Contextes (net.ui et net.game) est-ce un problème?

+0

Vous n'êtes plus qu'à stocker plusieurs '' Strings' an'd ertains Ints ', ce fichier ne devrait pas être si gros (5 Mo). D'un autre côté, pourriez-vous confirmer que le fichier 'SharedPreferences' est si gros (je veux dire le regarder sur le stockage)? Si ça devient si gros, alors vous aurez probablement besoin d'utiliser SQLite pour stocker ces résultats, de l'or etc. – g00dy

+0

Comment puis-je accéder au fichier? – Moondustt

+0

Vous pouvez trouver le fichier n'importe où dans les composants de l'application, ou s'il n'est pas privé -> '/ data/data/Util/shared_prefs/preference_filename.xml' ou'/data/data/Util/shared_prefs/Util_preferences.xml'. – g00dy

Répondre

0

Je crois que c'est une chose connue si vous stockez de nombreuses valeurs différentes dans les préférences partagées.

Il peut être préférable de stocker les données dans la base de données SQLite.

+0

bien, ce ne sont pas de valeurs .. essentiellement: YourCurrentMoney = chaîne YourCurrentHead = Chaîne par des virgules (max 7 itens) YourCurrentBody = chaîne par des virgules (max 7 itens) YourCurrentBoard = chaîne par des virgules (max 7 itens) – Moondustt

0

Selon this réponse, SharedPreference est stockée dans la mémoire une fois qu'il est chargé, à l'intérieur Contexte (va être supprimée une fois ce contexte spécifique est détruit)

Questions connexes