Android清理快取工具類
阿新 • • 發佈:2018-12-15
DataCleanUtil.java
import android.content.Context; import android.os.Environment; import java.io.File; import java.math.BigDecimal; /** * @description :快取工具類 */ public class DataCleanUtil { /** * 獲取快取大小 * @param context * @return * @throws Exception */ public static String getTotalCacheSize(Context context) throws Exception { long cacheSize = getFolderSize(context.getCacheDir()); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { cacheSize += getFolderSize(context.getExternalCacheDir()); } return getFormatSize(cacheSize); } /** * 清除所有快取 * @param context */ public static void clearAllCache(Context context) { deleteDir(context.getCacheDir()); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { deleteDir(context.getExternalCacheDir()); } } /** * 刪除檔案目錄 * @param dir * @return */ private 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(); } /** * MethodsTitle: 獲取檔案 * 步驟: * Context.getExternalFilesDir() --> SDCard/Android/data/你的應用的包名/files/目錄,一般放一些長時間儲存的資料 * Context.getExternalCacheDir() --> SDCard/Android/data/你的應用包名/cache/目錄,一般存放臨時快取資料 * @param file * @return * @throws Exception */ public static long getFolderSize(File file) throws Exception { long size = 0; try { File[] fileList = file.listFiles(); for (int i = 0; i < fileList.length; i++) { // 如果下面還有檔案 if (fileList[i].isDirectory()) { size = size + getFolderSize(fileList[i]); } else { size = size + fileList[i].length(); } } } catch (Exception e) { e.printStackTrace(); } return size; } /** * 格式化單位並計算快取的大小 * @param size * @return */ public static String getFormatSize(double size) { double kiloByte = size / 1024; if (kiloByte < 1) { // return size + "Byte"; return "0K"; } double megaByte = kiloByte / 1024; if (megaByte < 1) { BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); return result1.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "KB"; } double gigaByte = megaByte / 1024; if (gigaByte < 1) { BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); return result2.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "MB"; } double teraBytes = gigaByte / 1024; if (teraBytes < 1) { BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); return result3.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "GB"; } BigDecimal result4 = new BigDecimal(teraBytes); return result4.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "TB"; } }
程式碼中使用(MainActivity.java):
import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private TextView cache_size; private Button clear; String cacheSize; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cache_size = (TextView) findViewById(R.id.cache_size); clear = (Button) findViewById(R.id.clear); getTotalCacheSize(); clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clearCache(); } }); } private void clearCache() { new AlertDialog.Builder(MainActivity.this) .setTitle("是否清楚快取?") .setMessage("確認清除所有的快取") .setPositiveButton("清除", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (cacheSize.equals("0K")) { Toast.makeText(MainActivity.this, "沒有快取可以清除", Toast.LENGTH_SHORT).show(); return; } //在子執行緒執行刪除快取 new Thread(new Runnable() { @Override public void run() { DataCleanUtil.clearAllCache(MainActivity.this); //在主執行緒執行更新UI操作 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "清除快取成功", Toast.LENGTH_SHORT).show(); getTotalCacheSize(); } }); } }).start(); } }) .setNegativeButton("取消", null).show(); } private void getTotalCacheSize() { try { //這個操作要放在try-catch當中 cacheSize = DataCleanUtil.getTotalCacheSize(MainActivity.this); cache_size.setText(cacheSize); } catch (Exception e) { e.printStackTrace(); } } }
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/cache_size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:layout_centerInParent="true" android:textSize="18sp" android:textColor="#f2fa" /> <Button android:id="@+id/clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/cache_size" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:padding="5dp" android:text="清理記憶體"/> </RelativeLayout>