2012-02-21 4 views
0

Android携帯用のシンプルなアプリ(TCHS JROTC)を作りました。私はGalaxy S2 Epic 4gでこのアプリを作ったが、完璧に処理した。 Evo 4gやNexus Sなどの他の携帯電話を除いて、約8枚の画像アイコンを持つ特定の画面を強制的に閉じます。私はそれをデバッグし、 "Not Enough Memory"と言うエラーをスローします。これは私のコードが完全に完璧で完璧に機能していると思っていたものです。誰もが、単にアイコンの画像を一度にアクティビティをダンプするのではなく、アプリケーションを段階的にロードする方法を考えていますか?ありがとう!Android Appが多すぎるメモリを使用しています。 RAMを少なくして実行するにはどうすればよいですか?

+4

メモリ不足エラーを正常に処理できない場合は、コードは完璧ではありません – LordT

+1

異なるDPIのアイコンを提供していますか?つまり、それらを 'drawable-xhdpi' /' drawable-hdpi'/'drawable-mdpi'と' drawable-ldpi'か、すべてを 'drawable'にダンプしましたか? – Jens

+1

メモリ不足の時点でのログ出力と、その画面で何をしているのかについてのより深い説明を見ると非常に役に立ちます。私はあなたが使用しているイメージがあなたのUIに適した大きさであることを確認します。必要以上に大きいイメージを使用するとメモリフルサイズでロードしてからサイズを変更する必要があります。それ以上に、実際にはメモリリークがあり、MATを使用してGoogle IOビデオを検索することをお勧めします。 – cistearns

答えて

0

あなたのアプリのメモリ消費量を減らすためにできることは、アイコンにピクセルの別のエンコーディングを使用することです。

ピクセルをRGB888、ARGB8888、ARGB4444、RGB565などでエンコードすることができます。ビットマップがアセットの形式で格納されている場合、ビットマップをロードする方法は次のとおりです。この例は、「Androidゲームを始める」という本の例です。あなたがAndroidゲームを書くことに興味がない場合でも絶対にお勧めです。

InputStream inputStream = assetManager.open("bob.png"); 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_4444; 
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options); 

この例では、ARGB4444エンコーディングが使用されています。たとえば、ARGB8888よりも少ないメモリを使用します。

私はちょうどアンドロイドプログラミングの初心者です。しかし、私はそれはあなたがあなたのプロジェクトに直接入れるのではなく、外部メモリ/ SDカードにイメージを保存すると、あなたのアプリのメモリフットプリントを減らすかもしれないと思う。こうすることで、結果の.apkファイルの一部になります。これには余分なバイトがいくつかあります。 :-)この点について私が間違っている場合は、私を修正してください。私はちょうど学んでいます。

+2

最後の点が間違っています。異なるファイルシステムの場所にファイルを格納しても、メモリ不足(ヒープ)問題の解決には役立ちません。 – cistearns

+0

私はドロウアブルを使っていましたが、それは非常にばかな間違いでした。私は彼らが適切なサイズに私のアプリを2MBから567または何かKBに行ったそれらをrescaledときに私は小さな肥大化する必要があったときに巨大な写真を保存!それはすべての強制的な問題を解決し、それは私の問題でした。しかし、助けてくれてありがとう! – user1064249

関連する問題