欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)緩存大圖到SD卡

 更新時間:2021年09月27日 17:29:03   作者:_萬能的博哥  
這篇文章主要為大家詳細介紹了Android實現(xiàn)緩存大圖到SD卡,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android實現(xiàn)緩存大圖到SD卡的具體代碼,供大家參考,具體內(nèi)容如下

該功能主要針對資源圖片過大占用apk體積,所以先將圖片事先下載,在通過Glide加載時先去本地取,取值成功時直接應(yīng)用且節(jié)省了時間,若本地圖片不存在或取值失敗等,在通過網(wǎng)絡(luò)加載。。。

1、開啟子線程
2、通過圖片url進行本地緩存
3、判斷SD是否掛載
4、判斷本地是否存在該文件
5、存在將文件放到指定路徑下 

public void downloadOnly(@Nullable final List<String> imageUrlList) {
 
    if (Tools.isEmpty(imageUrlList)) {
      return;
    }
 
    if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
      return;
    }
 
    new Thread(new Runnable() {
      @Override
      public void run() {
        final File parent = MainApplication.getContext().getExternalCacheDir();
        for (String url : imageUrlList) {
          try {
            File tempFile = findImageByUrl(url, Tools.getApplication());
            if (tempFile == null) {
              File file = Glide
                  .with(MainApplication.getContext())
                  .load(url)
                  .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                  .get();
              Uri uri = Uri.parse(url);
              String fileName = uri.getLastPathSegment();
              if (Tools.notEmpty(fileName)) {
                copy(file, new File(parent, uri.getLastPathSegment()));
              }
            }
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
    }).start();
  }
 
  //復(fù)制文件
  public void copy(File source, File target) {
    FileInputStream fileInputStream = null;
    FileOutputStream fileOutputStream = null;
    try {
      fileInputStream = new FileInputStream(source);
      fileOutputStream = new FileOutputStream(target);
      byte[] buffer = new byte[1024];
      while (fileInputStream.read(buffer) > 0) {
        fileOutputStream.write(buffer);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (fileInputStream != null) {
          fileInputStream.close();
        }
 
        if (fileOutputStream != null) {
          fileOutputStream.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

1、判斷SD是否掛載
2、判斷文件URL是否為空
3、判斷文件是否存在

//查找本地文件是否存在
  @Nullable
  public static File findImageByUrl(@Nullable String url, @Nullable Context context) {
    if (Tools.isEmpty(url) || context == null) {
      return null;
    }
    try {
      if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
        return null;
      }
      Uri uri = Uri.parse(url);
      String fileName = uri.getLastPathSegment();
      if (Tools.notEmpty(fileName)) {
        File file = new File(context.getExternalCacheDir(), fileName);
        return file.exists() ? file : null;
      }
    } catch (Exception e) {
      return null;
    }
    return null;
  }

如上流程操作后,網(wǎng)絡(luò)穩(wěn)定的情況下已經(jīng)將文件下載到本地了,只需調(diào)用該方法加載即可,如若網(wǎng)絡(luò)不穩(wěn)定的沒下載成功情況下也沒事,glide會協(xié)助加載的?。?!

 /**
   * 加載圖片
   * 先從緩存中根據(jù)url對應(yīng)名稱判斷是否有圖片
   */
  public static void loadImageByCacheFirst(Context context, String url, ImageView imageView) {
    try {
      if (context == null) {
        return;
      }
 
      File file = findImageByUrl(url, context);
      if (file != null) {
        Glide.with(context).load(file).into(imageView);
      } else {
        Glide.with(context).load(url).into(imageView);
      }
    } catch (Throwable t) {
      t.printStackTrace();
    }
  }

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

相關(guān)文章

  • Android RecyclerView添加FootView和HeadView

    Android RecyclerView添加FootView和HeadView

    這篇文章主要介紹了Android RecyclerView添加FootView和HeadView的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android 通過觸摸動態(tài)地在屏幕上畫矩形效果

    Android 通過觸摸動態(tài)地在屏幕上畫矩形效果

    在屏幕上用手指畫出一個區(qū)域,返回所圈的區(qū)域坐標(biāo)。通過自定義view設(shè)置畫筆及對應(yīng)參數(shù),在onTouchEvent()回調(diào)函數(shù)里,對觸摸事件進行判斷。畫出矩形圖形,具體實現(xiàn)代碼大家參考下本文
    2017-07-07
  • Android EditText搜索框?qū)崿F(xiàn)圖標(biāo)居中

    Android EditText搜索框?qū)崿F(xiàn)圖標(biāo)居中

    本篇文章主要介紹了Android EditText搜索框?qū)崿F(xiàn)圖標(biāo)居中,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Android實現(xiàn)屏幕保持常亮功能

    Android實現(xiàn)屏幕保持常亮功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)屏幕保持常亮功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Jetpack Compose按鈕組件使用實例詳細講解

    Jetpack Compose按鈕組件使用實例詳細講解

    這篇文章主要介紹了Jetpack Compose按鈕組件使用實例,按鈕組件Button是用戶和系統(tǒng)交互的重要組件之一,它按照Material Design風(fēng)格實現(xiàn),我們先看下Button的參數(shù)列表,通過參數(shù)列表了解下Button的整體功能
    2023-04-04
  • Android動畫教程之屬性動畫詳解

    Android動畫教程之屬性動畫詳解

    這篇文章主要給大家介紹了關(guān)于Android動畫教程之屬性動畫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Android賬號注冊實現(xiàn)點擊獲取驗證碼倒計時效果

    Android賬號注冊實現(xiàn)點擊獲取驗證碼倒計時效果

    這篇文章主要為大家詳細介紹了Android賬號注冊過程中實現(xiàn)點擊獲取驗證碼倒計時效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android打包篇:Android Studio將代碼打包成jar包教程

    Android打包篇:Android Studio將代碼打包成jar包教程

    這篇文章主要介紹了Android打包篇:Android Studio將代碼打包成jar包教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android基于Fresco實現(xiàn)圓角和圓形圖片

    Android基于Fresco實現(xiàn)圓角和圓形圖片

    這篇文章主要為大家詳細介紹了Android基于Fresco實現(xiàn)圓角和圓形圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 圖解 Kotlin SharedFlow 緩存系統(tǒng)及示例詳解

    圖解 Kotlin SharedFlow 緩存系統(tǒng)及示例詳解

    這篇文章主要為大家介紹了圖解 Kotlin SharedFlow 緩存系統(tǒng)及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10

最新評論