2012-03-05 13 views
0

大きな画像を描画するときにエミュレータがクラッシュする問題があります。クラッシュは、drawableでsetBoundsを使用するとNullPointerExceptionが発生します(何らかの理由でdrawableがnullになる)。エミュレータでNullPointerExceptionが発生する大きな画像

問題はエミュレータでのみ発生し、私のデバイス(HTC Desire)にロードする場合は発生しません。

私の画像は1080x1658px jpgです。はるかに小さい画像を指定すると、問題はなくなります。

私のコードは次のようになります。アプリケーションのヒープが大きすぎる場合

public class Map { 

    private Drawable mapImage; 

    public Map(Context context) { 
     mapImage = context.getResources().getDrawable(R.drawable.north); 
    } 

    public void render(Canvas canvas) { 
     mapImage.setBounds(0, 0, 1080, 1658); 
     mapImage.draw(canvas); 
    } 

} 

答えて

1

あなたはチェックしましたか?あなたはEclipseでDDMSでそれを行うことができます。 そのサイズの画像が大きな問題を引き起こしている可能性があります。

新しいビットマップスペースを確保するために、古いビットマップをリサイクルするようにしてください。これはAndroidで最も問題の多いものの1つです。

設定でエミュレータのヒープサイズを増やすこともできますが、これは多くのデバイスが約32 MBのヒープしか持たないため現実には当てはまりません。

+0

こんにちは、私は日食でDDMSパースペクティブのヒープサイズを見てみましたが、VMがクラッシュしたので、私は(ヒープサイズを見ることができる前に、プロセスがシャットダウンされています私が大きなイメージで活動を開くとき)。私はしかし、コードベースを共有する別のアプリを持っているが、小さな画像(900x952)を使用して、このアプリはクラッシュしないと私はヒープがそのアプリで6,070メガバイトを超えることはないと言うことができるので、エミュレータのデフォルトの24 MB? – mat

1

エミュレータの最大VMアプリケーションヒープサイズをさらに大きくすると、編集してAVDの値を変更することができます。基本的に、これはあなたのエミュレータ上の各プロセスに割り当てられるメモリの量を増やします。デフォルトでは、これは実際のデバイスでより高い値に設定されています。

enter image description here

同様の問題:http://androidforums.com/application-development/48495-memory-size-emulator.html

+0

ヒープサイズが大きければ、彼のアプリを手伝ってくれるが、実際にはデバイスの多くが約32MBのヒープサイズしか持たないため、現実を反映していないと思う。 – Tim

+0

よく指摘されているTim、Matでは、小さなデバイスに小さいイメージを使用して、そのデバイスのヒープサイズを超えないようにする必要があります。現在のエミュレータの問題を回避するだけなら、今のところヒープサイズを増やすことができます。 – Soham

+0

エミュレータでヒープサイズを大きくしても、問題を「解決」できないようです。 VMはまだクラッシュします。 – mat

関連する問題