Middle
Sabes como funciona o cartão de cache?
sobes.tech IA
Resposta da IA
A memória cache (Memory Cache) no Android é um mecanismo de armazenamento de dados na memória RAM do dispositivo para acesso rápido. Baseia-se nos princípios do cache associativo.
Como funciona:
- Pedido de dados: Quando são solicitados dados que podem ser armazenados em cache (por exemplo, uma imagem da rede ou o resultado de uma operação complexa), a aplicação verifica primeiro o cache.
- Procura no cache: Se os dados forem encontrados no cache (ou seja, a chave da solicitação corresponde à chave no cache), eles são devolvidos imediatamente, evitando operações de entrada/saída ou cálculos lentos. Isto é chamado de "cache hit".
- Falta de cache (Cache Miss): Se os dados não forem encontrados no cache ("cache miss"), a aplicação obtém-nos da fonte original (rede, base de dados, etc.).
- Colocação no cache: Após obter os dados, eles são colocados no cache para futuras solicitações com a mesma chave.
- Esvaziamento (Cache Eviction): O cache tem um tamanho limitado. Quando está cheio, os elementos antigos ou menos utilizados são expulsos para libertar espaço para novos. Os algoritmos comuns de expulsão incluem LRU (Least Recently Used - menos recentemente utilizado) e LFU (Least Frequently Used - menos utilizado com frequência).
Exemplo de implementação em Android usando LruCache:
// Criação de um LruCache com tamanho máximo
private LruCache<String, Bitmap> memoryCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtenção do tamanho máximo de memória disponível para a aplicação (em KB)
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Usar 1/8 da memória disponível para o cache
final int cacheSize = maxMemory / 8;
memoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// Método para calcular o tamanho de cada elemento do cache em unidades,
// neste caso - KB
return bitmap.getByteCount() / 1024;
}
};
}
// Adicionar elemento ao cache
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
memoryCache.put(key, bitmap);
}
}
// Obter elemento do cache
public Bitmap getBitmapFromMemCache(String key) {
return memoryCache.get(key);
}