アプリメモリを最適化する

メモリはどのソフトウェア開発環境でも貴重なリソースですが、物理メモリが制限されることが多いモバイル オペレーティング システムではさらに貴重になります。これは特に、Android(Go バージョン)で一般的に見られるネイティブに低メモリなデバイスに当てはまります。このような環境でスムーズな動作を実現するために、アプリ内のメモリを最適化する方法がいくつかあります。

ベスト プラクティス

キャッシュ メモリを解放する

通常の環境と同じように、バックグラウンド プロセスを実行し続けるための十分なメモリがない場合があります。この場合、onTrimMemory() を使用すると、アプリのプロセスから不要なメモリをカットできます。アプリの現在のトリムレベルを最もよく特定するには、ActivityManager.getMyMemoryState(RunningAppProcessInfo) を使用し、不要なリソースを最適化またはカットします。たとえば、式、検索、ビュー キャッシュ、開閉可能な拡張機能から来る不要なメモリ使用量を削減することで、メモリ不足を原因とするアプリのクラッシュや ANR の発生回数を減らすことができます。

タスクのスケジュール設定

スケジューリングを同時実行すると、メモリ使用量の多いオペレーションが並行して実行され、アプリのピークメモリ使用量を超えるリソースの競合が発生する可能性があります。さまざまなリソース制約が存在する可能性があるデバイス上で実行するために、適切なスレッドプールで CPU 使用率が高くレイテンシの低いタスクにプロセスを分離することで、リソースを適切に割り当てるようにします。

メモリリーク

Android Studio の Memory ProfilerPerfetto など、アプリ内のメモリリークを見つけて削減するのに特に役立つさまざまなツールがあります。これらのツールを使用して潜在的なメモリの問題を特定して修正し、システムに余分な負荷をかけずにアプリの他のコンポーネントを実行できるようにすることを強く推奨します。

その他のヒント

  • 大きな画像やドローアブルは、アプリで多くのメモリを消費します。大きなビットマップやフルカラーのビットマップを特定して最適化し、メモリ使用量を削減します。
  • GIF は大量のメモリを消費するため、Android(Go バージョン)向けにビルドする場合は、アプリで GIF の他のオプションを選択するようにします。
  • WebP、pngcrush、pngquant などのツールを使用すると、画質を損なわずに PNG ファイルサイズを縮小できます。これらはすべて、画質を保ちながら PNG ファイルのサイズを縮小できるツールです。
  • aapt は、ビルドプロセス時に可逆圧縮によって res/drawable/ 内の画像リソースを最適化できるツールです。たとえば、aapt ツールを使用すると、256 色以上を必要としないトゥルーカラーの PNG を、カラーパレットを使用する 8 ビットの PNG に変換できます。この変換により、画質を変えずにメモリ使用量を削減できます。