Programming Style

メニュー

初心者がアプリ開発者になるためのプログラミング学習サイト

[Android] 大量のヒープを確保する

android-common-top

Androidアプリ開発をしていると、1つのプロセスで多くのメモリを必要となるケースがあるかと思います。ここでは、より大きいヒープを確保する方法について説明します。

 

広 告

 

目次

前提条件

  • なし

動作確認端末

  • Google Nexus 5 – 5.0.0 – API21(エミュレータ)

1. ヒープとは

Androidでは、プロセス毎に「ヒープ」というメモリ領域をが確保されます。ヒープは、実際にプログラムが実行される時、画像データを確保したり、変数をしたり、必要なサイズを確保し、作業できるメモリ領域になります。アプリがメモリを大量に使用した時、メモリ量がヒープのサイズを超え、Out Of Memoryが発生します。

 

2. ヒープを確保する方法

Androidでは通常のアプリより大きいヒープを確保する方法があります。方法は非常にシンプルで、AndroidManifest.xml内の<application>タグにlargeHeap="true"を記載するだけです。

以下が実装例になります。

 

largeHeap属性の使い方

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
…
>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme" >
    …

    </application>

</manifest>

このlargeHeapの設定は、最初から大きなヒープを確保しているわけでなく、ヒープが圧迫された場合に、新しいヒープを確保する挙動をとります。その際、以下のデバッグログが出力されLogcatで確認することができます。

 

ヒープを確保された時のログ内容

Grow heap (frag case) to XX.MB for XXXXXXX-byte allocation

 

3. 注意点

一般的にメモリを大量に消費するアプリは、システム全体にリソースを圧迫することになるため、好ましくありません。この設定は、画像ビュアーアプリなどの大量にヒープを使うアプリを実装する場合にのみ、最終手段として使用するべきです。

 

 

広 告