2013-05-21 6 views
4

J'essaye de créer une démo simple pour la fonctionnalité ImageLoader pour le Android Volley Framework. Constructor est le suivant:Mise en œuvre non-bloquante du cache de fichiers (BitmapLruCache)?

public ImageLoader(RequestQueue queue, ImageCache imageCache) 

Le problème est avec le ImageCache. Ses états JavaDoc sont les suivants:

Interface d'adaptateur de cache simple. S'il est fourni à l'ImageLoader, le sera utilisé comme cache L1 avant d'être envoyé à Volley. Les implémentations ne doivent pas bloquer. L'implémentation avec un LruCache est recommandée.

  1. Qu'est-ce exactement les « ne doivent pas bloquer Implémentations » dans ce contexte signifie?
  2. Existe-t-il un exemple de cache de fichiers non bloquant (même non java mais "pur" java) que je peux utiliser pour apprendre à mon propre personnel comment convertir mon cache de fichiers existant pour qu'il ne soit pas bloquant?
  3. Si aucune existe - quelles peuvent être les conséquences négatives de l'utilisation de mon implémentation existante qui est (juste la lecture du fichier):

    public byte [] get (nom de fichier String) {

    byte[] ret = null; 
    
    if (filesCache.containsKey(filename)) { 
        FileInfo fi = filesCache.get(filename); 
        BufferedInputStream input; 
    
        String path = cacheDir + "/" + fi.getStorageFilename(); 
        try { 
         File file = new File(path); 
         if (file.exists()) { 
          input = new BufferedInputStream(new FileInputStream(file)); 
          ret = IOUtils.toByteArray(input); 
          input.close(); 
         } else { 
          KhandroidLog.e("Cannot find file " + path); 
         } 
        } catch (FileNotFoundException e) { 
         filesCache.remove(filename); 
         KhandroidLog.e("Cannot find file: " + path); 
        } catch (IOException e) { 
         KhandroidLog.e(e.getMessage()); 
        } 
    } 
    
    return ret; 
    

    }

Répondre

5

Qu'est-ce exactement les 'ne doivent pas bloquer Implémentations' dans ce contexte signifie?

Dans votre cas, vous ne pouvez pas effectuer d'E/S disque.

Il s'agit d'un cache de niveau un (L1), ce qui signifie qu'il est conçu pour revenir en quelques microsecondes, et non en millisecondes ou en secondes. C'est pourquoi ils préconisent LruCache, qui est un cache mémoire.

est-il un exemple de cache de fichiers non-bloquant (même non-android, mais java « pur ») que je peux utiliser pour éduquer mon auto comment convertir le cache de mon fichier existant pour être non-blocage?

Un cache L1 ne doit pas être un cache de fichiers.

quelles peuvent être les conséquences négatives de l'utilisation de mon implémentation existante qui est (juste la lecture du fichier)

cache une L1 ne doit pas être un cache de fichiers.

Volley dispose déjà d'un cache de fichiers L2 intégré, nommé DiskBasedCache, utilisé pour mettre en cache les réponses HTTP. Vous pouvez substituer votre propre implémentation de Cache pour DiskBasedCache si vous le souhaitez, et fournir cela lorsque vous créez votre RequestQueue.