2013-04-25 38 views
6

CẦN: Tôi chỉ đơn giản là cố gắng để có được kích thước bộ nhớ cache bị chiếm đóng của mỗi ứng dụng được cài đặt trong điện thoại của tôi.Cách lấy kích thước chính xác của thư mục bộ nhớ cache: android

TÔI TIẾP CẬN:

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(); 
    } 
} 

KẾT QUẢ: Nếu thư mục là null nó trở về 0 (như điều kiện). Nhưng nếu thư mục tồn tại của nó trở về 4 Kb luôn. Tôi đã kiểm tra ra bộ nhớ cache của ứng dụng của tôi bằng cách làm theo quy trình:

Cài đặt: -> Ứng dụng: -> ApplicationName

Nhưng tôi thấy 0B nó ở đó.

Tại sao sự cố xảy ra, ai đó có thể giải thích? và Làm cách nào để nhận được kích thước bộ nhớ cache chính xác?

Trả lời

9

Độ dài cuộc gọi trên thư mục không phải lúc nào cũng trả lại kích thước chính xác. Bạn có thể thử lặp qua danh sách tệp và thêm tất cả kích thước tệp để nhận được tổng kích thước thư mục.

Như thế này:

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

nơi làm tôi đặt/thay thế mã này w ith ?? – MaggotSauceYumYum

0

bạn sẽ nhận được Cachesize từ chức năng này

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(); 
    } 
} 
5

này đã được chính xác hơn với tôi:

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]; 
} 

Original post of the string to bytes formatting code

+1

Câu trả lời này hoàn chỉnh hơn và tổng quát hơn để có thể sử dụng ở mọi nơi. –

Các vấn đề liên quan