LoginSignup
4
0

メモリ消費の削減を試してみた話

Last updated at Posted at 2023-12-20

これは ZOZO Advent Calendar 2023 シリーズ9の21日目の記事です。

はじめに

先日、Android Dagashiさんの中で65% Smaller APKs and 70% Less Memory: How I Optimized My Android App -Part II (App Memory)という記事がリストアップされていました。ご覧になった方も多いのではないでしょうか。

私も同記事を読んでみたところ、参考になるTipsが多く含まれていました。
そのため、自身が携わっているアプリで試してみることにしました。

計測する

記事に倣って、現在のメモリ消費量を計測します。
今回は手元のデバック環境で試すだけのため、Android Profilerを使用します。

Galaxy SC-51D(Android 13)を使用し、画像を大量に読み込む操作を行ったところ、操作時のメモリ消費量は580MB前後でした。
本来は丁寧にボトルネック箇所を探すべきですが、今回は勉強も兼ねて記事の内容を試してみましょう。

手法を試す

記事で紹介されている手法の内、以下の3つを試しました。

  1. カラーフォーマットの変更
  2. offScreenPageLimitの変更
  3. onViewRecycled時のリクエストのキャンセル

1. カラーフォーマットの変更

対象のAndroidアプリはCoilとPicassoを使用しているため、以下のようにコードを追加しました。

// Coil
 ImageRequest.Builder(LocalContext.current).data(url).apply {
    // 省略
    allowRgb565(true)
// Picasso
// インスタンス生成時にconfigを渡す
Picasso myPicasso = new Picasso.Builder(this.getContext()).defaultBitmapConfig(RGB_565).build();

再度計測すると、535MBまで減少しました🎉

Before 1
消費量 580MB 535MB

2. offScreenPageLimitの変更

offScreenPageLimitを2に設定している箇所があったため、1に変更します。
※コードは省略します

再度計測すると、525MBまで減少しました。
カラーフォーマットほどではありませんが、効果があるようです。

Before 1 1 + 2
消費量 580MB 535MB 525MB

3. onViewRecycled時にリクエストをキャンセルする

RecyclerViewの中でPicassoを使用しているため、以下のようにコードを追加します。

public class MyRecyclerView extends RecyclerView {
    // 省略
    @Override
    public void onViewRecycled(@NonNull HogeViewHolder holder) {
        Picasso.get().cancelRequest((ImageView)holder.itemView);
    }
}

再度計測すると、今回は増加してしまいました。

Before 1 1+2 1+2+3
消費量 580MB 535MB 525MB 555MB

詳しい原因は追えていませんが、今回は1+2の組み合わせが効果的なようでした。

さいごに

今回は65% Smaller APKs and 70% Less Memory: How I Optimized My Android App -Part II (App Memory)で紹介されている手法の一部を試してみました。

その結果、以下の通りにメモリ消費量を削減できることが分かりました🎉

Before After
消費量 580MB 525MB

画像の扱いに悩んでいる方は是非元の記事をご参照ください!

参考URL

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0