2011-08-01 52 views
16

Tôi cần tìm cách xóa dữ liệu mà ứng dụng lưu trữ trong bộ nhớ cache. Về cơ bản, tôi đang sử dụng Fedor's (Lazy load of images in ListView) thực hiện danh sách lười và tôi muốn xóa bộ nhớ cache tự động khi có ví dụ 100 hình ảnh được tải. Bất kỳ ý tưởng nào về cách thực hiện điều đó?Cách xóa bộ nhớ cache Android

EDIT: Code:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    list=(ListView)findViewById(R.id.list); 
    adapter=new LazyAdapter(this, mStrings); 
    list.setAdapter(adapter); 

    deleteCache(this); 
    adapter.notifyDataSetChanged(); 


} 

public static void deleteCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) {} 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
+0

Xin chào, bạn có câu trả lời không? Tôi có cùng một vấn đề như bạn. tôi muốn bộ nhớ cache rõ ràng để tải hình ảnh mới. cảm ơn –

Trả lời

33

này sẽ xóa bộ nhớ cache

public static void deleteCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) {} 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
+0

và làm cách nào tôi có thể gọi chúng? – hardartcore

+0

gọi phương thức này bằng deleteCache (điều này); –

+1

vẫn không xóa bộ nhớ cache – hardartcore

4

Tôi hy vọng điều này sẽ giúp bạn trong việc tiếp tục

public static void trimCache(Context context) { 
    File dir = context.getCacheDir(); 
    if(dir!= null && dir.isDirectory()){ 
     File[] children = dir.listFiles(); 
     if (children == null) { 
      // Either dir does not exist or is not a directory 
     } else { 
      File temp; 
      for (int i = 0; i < children.length; i++) { 
       temp = children[i]; 
       temp.delete(); 
      } 
     } 

    } 

} 
+1

Vui lòng không thêm các dòng thẻ hoặc chữ ký vào bài đăng của bạn. Tên của bạn với một liên kết đến hồ sơ của bạn được tự động hiển thị ở cuối mỗi câu hỏi hoặc câu trả lời mà bạn viết. –

-4

Huỷ bộ chuyển đổi cũ và đính kèm các listview đến một thể hiện mới của bộ điều hợp (l istview sẽ mất vị trí cuộn, mặc dù). Ví dụ:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    m_adapter = new MyAdapter(this); 
     final ListView listView = (ListView) getView() 
       .findViewById(R.id.my_list); 
     listView.setAdapter(m_adapter); 
    } 
} 
+0

Điều này liên quan đến việc xóa bộ nhớ cache của ứng dụng như thế nào? – Tomas

0

Nếu sử dụng Apache Commons IO, bạn có thể thực hiện điều này với một dòng duy nhất (không bao gồm try-catch):

try { 
    FileUtils.deleteDirectory(context.getCacheDir()); 
} catch (IOException e) { 
    // Do some error handling 
} 
1

bạn có thể gọi dịch vụ hệ thống clearApplicationUserData() (chỉ làm việc cho> = phiên bản KitKat)

để bạn có thể thực hiện kiểm tra phiên bản và sau đó mọi thứ sẽ tốt :) đây là mã:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      ((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE)) 
        .clearApplicationUserData(); 
    } 
+0

Chào mừng bạn đến với StackOverflow! Ngoài việc cung cấp thông tin về những việc cần làm khi sử dụng KitKat trở lên, vui lòng bao gồm thông tin cho người dùng sử dụng phiên bản thấp hơn. – buczek

+0

Trên thực tế, đoạn mã này đã treo hoàn toàn ứng dụng của tôi. – Borzh

+0

Phương pháp này cho rõ ràng ** tất cả dữ liệu của ứng dụng **, không phải bộ nhớ cache của ứng dụng!Theo [câu trả lời] này (https://stackoverflow.com/a/37086256/2416369), dự kiến ​​ứng dụng sẽ đóng, vì phương pháp này đặt lại hoàn toàn ứng dụng, vì vậy ứng dụng không cần phải chạy ... –

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