Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Glideをもっと深くまでカスタマイズしてもっと便利に / Let’s customize Glide to make it more useful

Glideをもっと深くまでカスタマイズしてもっと便利に / Let’s customize Glide to make it more useful

Glideをもっとカスタマイズしてもっと便利に

玉木 英嗣
LINE株式会社 LINEコミュニケーションサービス開発チーム
2018年に新卒として入社。以来、LINEのAndroidアプリのチャット関連機能の新機能開発や内部改善などを担当している。

※以下のイベントの登壇資料です。
https://line.connpass.com/event/227233/

LINE Developers

October 28, 2021
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. 自己紹介 Tamaki Hidetsugu (@r_ralph_h) • LINE Platform Development センター2 LINEコミュニケーションプラットフォーム開発室

    LINEコミュニケーションサービス開発チーム • LINE アプリ(Android)のチャット周り担当 • 2018年 新卒入社
  2. GlideとLINEアプリ • 様々なカスタマイズが必要 • 認証ヘッダの付与 • 新しい画像フォーマットのサポート • ダウンロード進捗状況の通知 •

    LRUではない(消えない)ディスクキャッシュ • etc • View側に画像読み込みのための共通ロジックを見せたくない • 認証情報の取得(必要であればリフレッシュ) • URL・ディスクキャッシュのパスの取得 • etc
  3. 消えないディスクキャッシュの作り方 • 取得に成功したらcallbackにInputStreamを渡す • 必ず、一時ファイルに書き込んでから移動する(1敗) RemoteFetcher#loadData override fun loadData(…, callback:

    DataCallback<InputStream>) { val bodyInputStream = callRequest(url) // HTTPリクエストをする val tempFile = …… // 一旦、一時ファイルに書き込む bodyInputStream.copyTo(tempFile) tempFile.renameTo(file) callback.onDataReady(file.inputStream()) }
  4. 消えないディスクキャッシュの作り方 • 同様にFetcherを生成する LocalModelLoader#buildLoadData override fun buildLoadData( model: CustomRequest, …

    ): LoadData<InputStream> { val fetcher = LocalFetcher(createFile(model)) return LoadData(ObjectKey(model), fetcher) }
  5. GlideとLINEアプリ • 様々なカスタマイズが必要 • 認証ヘッダの付与 • 新しい画像フォーマットのサポート • ダウンロード進捗状況の通知 •

    LRUではない(消えない)ディスクキャッシュ • etc • View側に画像読み込みのための共通ロジックを見せたくない • 認証情報の取得(必要であればリフレッシュ) • URL・ディスクキャッシュのパスの取得 • etc
  6. GlideとLINEアプリ • 様々なカスタマイズが必要 • 認証ヘッダの付与 • 新しい画像フォーマットのサポート • ダウンロード進捗状況の通知 •

    LRUではない(消えない)ディスクキャッシュ → ModelLoaderを使う • etc • View側に画像読み込みのための共通ロジックを見せたくない • 認証情報の取得(必要であればリフレッシュ) • URL・ディスクキャッシュのパスの取得 • etc
  7. GlideとLINEアプリ • 様々なカスタマイズが必要 • 認証ヘッダの付与 → RemoteFetcherを更にカスタマイズ • 新しい画像フォーマットのサポート →

    ResourceDecoderを作る • ダウンロード進捗状況の通知 → RemoteFetcherを更にカスタマイズ • LRUではない(消えない)ディスクキャッシュ → ModelLoaderを使う • etc • View側に画像読み込みのための共通ロジックを見せたくない • 認証情報の取得(必要であればリフレッシュ) → RemoteFetcherに隠せる • URL・ディスクキャッシュのパスの取得 → ModelLoaderに隠せる • etc