Cómo obtener el tamaño exacto del directorio de caché: android

NECESIDAD: Simplemente intento obtener el tamaño de caché ocupado de cada aplicación que está instalada en mi teléfono.

MI ACERCAMIENTO:

PackageManager packageManager = getPackageManager(); List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo : packages) { try { Context mContext = createPackageContext(packageInfo.packageName, CONTEXT_IGNORE_SECURITY); File cacheDirectory = mContext.getCacheDir(); if(cacheDirectory==null) { cacheArrayList.add("0"); } else { cacheArrayList.add(String.valueOf(cacheDirectory.length()/1024)); } } catch (NameNotFoundException e) { e.printStackTrace(); } } 

RESULT: Si el directorio es nulo, devuelve 0 (como condición). Pero si el directorio ya existe 4 Kb siempre. Comprobé el caché de mis aplicaciones siguiendo el proceso:

Configuración: -> Aplicaciones: -> ApplicationName

Pero encontré su 0B allí.

¿Por qué sucede alguien puede explicar? Y ¿Cómo consigo el tamaño exacto del caché?

Longitud de llamada en un directorio no siempre devuelve el tamaño correcto. Puede intentar iterar sobre la lista de archivos y sumar todos los tamaños de archivo para obtener el tamaño total del directorio.

Me gusta esto:

 long size = 0; File[] files = cacheDirectory.listFiles(); for (File f:files) { size = size+f.length(); } 

Esto ha sido más exacto para mí:

 private void initializeCache() { long size = 0; size += getDirSize(this.getCacheDir()); size += getDirSize(this.getExternalCacheDir()); ((TextView) findViewById(R.id.yourTextView)).setText(readableFileSize(size)); } public long getDirSize(File dir){ long size = 0; for (File file : dir.listFiles()) { if (file != null && file.isDirectory()) { size += getDirSize(file); } else if (file != null && file.isFile()) { size += file.length(); } } return size; } public static String readableFileSize(long size) { if (size <= 0) return "0 Bytes"; final String[] units = new String[]{"Bytes", "kB", "MB", "GB", "TB"}; int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; } 

Puesto original del código de formato de cadena a bytes

Obtendrá cachesize de esta función

  public void clearCache() { //clear memory cache long size = 0; cache.clear(); //clear SD cache File[] files = cacheDir.listFiles(); for (File f:files) { size = size+f.length(); // f.delete(); } } 
  • Android: ¿Cómo recibir un html completo, con imágenes y archivos css como cadena?
  • El método getDrawingCache () de Android 2.1 View devuelve siempre null
  • Caché de objetos de Android
  • Android: almacenamiento de imágenes descargadas desde la Web
  • Necesita un ejemplo de HttpResponseCache en Android
  • Android HttpRequest resultado en caché durante 10 minutos en dispositivos Samsung Galaxy
  • Retrofit + OkHTTP - la caché de respuestas no funciona
  • ¿Los archivos temporales se eliminan incluso mientras se está ejecutando la aplicación?
  • ¿Reajusta la caché de las solicitudes de autorización?
  • Almacenamiento de gifs en fresco
  • Cómo activar la caché de expires-header para webview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.