最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android實(shí)現(xiàn)清理緩存功能

 更新時(shí)間:2019年11月21日 09:13:17   作者:zhyue28  
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)清理緩存,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

android之清理緩存實(shí)現(xiàn),供大家參考,具體內(nèi)容如下

一. 清理緩存首先要搞清楚清理哪些東西

1、app本身的功能比如錄像,錄音,更新都會(huì)產(chǎn)生文件,需要清理
2、app的默認(rèn)緩存地址cache

二. 搞清楚要清理的文件夾位置

1、首先app自身的功能就要看自己把它放在了什么位置
2、默認(rèn)緩存地址:getActivity().getExternalCacheDir();
這個(gè)位置是在storage/emulated/0/Android/data/com.xxxxxapp/cache

三.代碼功能模塊:

1、獲取app緩存大小,以字節(jié)為單位
2、獲取某個(gè)文件夾的大小,以字節(jié)為單位
3、把字節(jié)單位換算成常用單位
4、把緩存大小設(shè)置到頁面,清理前一次,清理后一次
5、刪除文件夾功能
6、清除app緩存

/**
 * 獲取app的緩存大小
 * 1. 錄制的視頻/storage/emulated/0/xueliangapp/video/1573972925136.mp4
 * 2. 錄制的音頻/storage/emulated/0/xueliangapp/radio/1573972925136.amr
 * 3. 下載的更新包/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files/Download/xueliang_update.apk
 * 4. 緩存/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/cache
*/
  File videoDir,radioDir,filesDir,cacheDir;
  private String getAppCache(){
    long fileSize = 0;
    String cacheSize = "0KB";
    videoDir = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/video");
    Log.d(TAG, "getAppCache: videoDir大小: "+getDirSize(videoDir));
    radioDir = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/radio");
    Log.d(TAG, "getAppCache: radioDir大小: "+getDirSize(radioDir));
    filesDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
    Log.d(TAG, "getAppCache: filesDir大小: "+getDirSize(filesDir));
    ///storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files,這里面有download文件夾,里面是下載的更新包
    cacheDir = getActivity().getExternalCacheDir();
    Log.d(TAG, "getAppCache: cacheDir大小: "+getDirSize(cacheDir));
    ///storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/cache
    fileSize += getDirSize(getActivity().getFilesDir());
    fileSize += getDirSize(getActivity().getCacheDir());//這行是默認(rèn)的緩存地址,看圖片什么的會(huì)在這里積累緩存
    fileSize += getDirSize(videoDir);
    fileSize += getDirSize(radioDir);
    fileSize += getDirSize(filesDir);
    fileSize += getDirSize(cacheDir);
    String fileSizeStr = formatFileSize(fileSize);
    Log.d(TAG, "getAppCache: 總緩存大小: "+fileSizeStr);
    return fileSizeStr;
  }

  /**
   * 獲取文件大小(字節(jié)為單位)
   * @param dir
   * @return
   */
  private long getDirSize(File dir) {
    if (dir == null) {
      return 0;
    }
    if (!dir.isDirectory()) {
      return 0;
    }
    long dirSize = 0;
    File[] files = dir.listFiles();
    for (File file : files) {
      if (file.isFile()) {
        dirSize += file.length();//文件的長(zhǎng)度就是文件的大小
      } else if (file.isDirectory()) {
        dirSize += file.length();
        dirSize += getDirSize(file); // 遞歸調(diào)用繼續(xù)統(tǒng)計(jì)
      }
    }
    return dirSize;
  }

  /**
   * 格式化文件長(zhǎng)度
   * @param fileSize
   * @return
   */
  private String formatFileSize(long fileSize){
    DecimalFormat df = new DecimalFormat("#0.00");//表示小數(shù)點(diǎn)前至少一位,0也會(huì)顯示,后保留兩位

    String fileSizeString = "";
    if (fileSize < 1024) {
      fileSizeString = df.format((double) fileSize) + "B";
    } else if (fileSize < 1048576) {
      fileSizeString = df.format((double) fileSize / 1024) + "KB";
    } else if (fileSize < 1073741824) {
      fileSizeString = df.format((double) fileSize / 1048576) + "MB";
    } else {
      fileSizeString = df.format((double) fileSize / 1073741824) + "G";
    }
    return fileSizeString;
  }
  private void setAppCache() {
    String fileSize = getAppCache();
    fileSizeTv.setText(fileSize);
    Log.d(TAG, "setAppCache: 重新顯示緩存大小");
    Log.d(TAG, "setAppCache: 當(dāng)前緩存"+fileSize);
  }

  public void clearAppCache(final Activity activity){

    final Handler handler = new Handler(){
      @Override
      public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        Log.d(TAG, "handlerMessage: ");
        if (msg.what == 1) {
          setAppCache();
          Log.d(TAG, "handlerMessage: 緩存清除完畢");
          ToastUtil.showMsg(getActivity(),"緩存清除完畢");
        }else {
          ToastUtil.showMsg(getActivity(),"緩存清除失敗");
          Log.d(TAG, "handlerMessage: 緩存清除失敗");
        }
      }
    };

    new Thread(new Runnable() {
      @Override
      public void run() {
        Log.d(TAG, "run: ");
        Message msg = new Message();
        try {
          clearCacheFolder(videoDir,System.currentTimeMillis());
          clearCacheFolder(radioDir,System.currentTimeMillis());
          clearCacheFolder(filesDir,System.currentTimeMillis());
          clearCacheFolder(cacheDir,System.currentTimeMillis());
          msg.what = 1;
        }catch (Exception e){
          e.printStackTrace();
          msg.what = -1;
        }
        handler.sendMessage(msg);
      }
    }).start();
  }


  /**
   * 清除緩存目錄
   * @param dir 目錄
   * @param curTime 當(dāng)前系統(tǒng)時(shí)間
   */
  private int clearCacheFolder(File dir,long curTime){
    int deletedFiles = 0;
    if (dir!= null && dir.isDirectory()) {
      try {
        for (File child:dir.listFiles()) {
          if (child.isDirectory()) {
            deletedFiles += clearCacheFolder(child, curTime);
          }
          if (child.lastModified() < curTime) {
            if (child.delete()) {
              deletedFiles++;
            }
          }
        }
      } catch(Exception e) {
        e.printStackTrace();
      }
    }
    Log.d(TAG, "clearCacheFolder: 清除目錄: "+dir.getAbsolutePath());
    return deletedFiles;
 }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kotlin中單利常用的五種寫法

    Kotlin中單利常用的五種寫法

    這篇文章主要給大家介紹了關(guān)于Kotlin中單利常用的五種寫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)合作工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • Flutter應(yīng)用框架運(yùn)行微信小程序方法

    Flutter應(yīng)用框架運(yùn)行微信小程序方法

    這篇文章主要介紹了在Flutter?App內(nèi)運(yùn)行微信小程序的過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • Android中使用CircleImageView和Cardview制作圓形頭像的方法

    Android中使用CircleImageView和Cardview制作圓形頭像的方法

    這篇文章主要介紹了Android中使用CircleImageView和Cardview制作圓形頭像的方法,簡(jiǎn)單介紹了CircleImageView和Cardview的使用,需要的朋友可以參考下
    2016-09-09
  • android讀取sdcard路徑下的文件的方法

    android讀取sdcard路徑下的文件的方法

    這篇文章主要介紹了android讀取sdcard路徑下的文件的方法,需要的朋友可以參考下
    2014-02-02
  • 超精準(zhǔn)的Android手機(jī)計(jì)步器開發(fā)

    超精準(zhǔn)的Android手機(jī)計(jì)步器開發(fā)

    這篇文章主要為大家詳細(xì)介紹了超精準(zhǔn)的Android手機(jī)計(jì)步器開發(fā)過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android strings.xml使用方法及技巧

    Android strings.xml使用方法及技巧

    本文主要介紹Android strings.xml,這里對(duì)strings.xml文件的使用和一些小技巧做了總結(jié),有興趣的同學(xué)可以看下
    2016-08-08
  • Android仿微信鍵盤切換效果

    Android仿微信鍵盤切換效果

    這篇文章主要為大家詳細(xì)介紹了Android仿微信鍵盤切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • AndroidStudio4.1 自定義模板的使用方法

    AndroidStudio4.1 自定義模板的使用方法

    這篇文章主要介紹了AndroidStudio4.1 自定義模板的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • android 拷貝sqlite數(shù)據(jù)庫到本地sd卡的方法

    android 拷貝sqlite數(shù)據(jù)庫到本地sd卡的方法

    下面小編就為大家?guī)硪黄猘ndroid 拷貝sqlite數(shù)據(jù)庫到本地sd卡的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 詳談自定義View之GridView單選 金額選擇Layout-ChooseMoneyLayout

    詳談自定義View之GridView單選 金額選擇Layout-ChooseMoneyLayout

    下面小編就為大家?guī)硪黄斦勛远xView之GridView單選 金額選擇Layout-ChooseMoneyLayout。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05

最新評(píng)論

余江县| 龙口市| 安福县| 荆门市| 武川县| 八宿县| 呼玛县| 丽江市| 门源| 莱西市| 甘孜县| 新竹市| 松溪县| 濮阳市| 津南区| 正蓝旗| 石柱| 松桃| 驻马店市| 永昌县| 江城| 寿光市| 宁国市| 根河市| 杭州市| 台湾省| 常德市| 河间市| 香格里拉县| 张家港市| 河东区| 万全县| 江华| 黑水县| 兴隆县| 旅游| 章丘市| 盐源县| 平乐县| 辽阳市| 延津县|