1

最近は、学習経験として android 用の音楽プレーヤーに取り組んでいます。順調に進んでいますが、一つ問題があります。音楽プレーヤーのアクティビティでは、ビットマップとして再生されている曲の埋め込みアルバム カバーを取得します。次に、このビットマップを ImageView に設定します。これは問題なく動作しますが、約 10 の異なる曲を起動した後、OutOfMemoryException が発生します。新しい曲を開始するたびに onCreate() が呼び出されるため、これは奇妙です。これは、前のアクティビティで onStop() が呼び出されたことを意味し (そうですか?)、onStop でビットマップを解放します (onDestroy() も試しましたが、それは役に立ちませんでした)。また、新しい曲の再生が開始されると、メディア プレーヤーがリセットされるため、問題にはなりません。OutOfMemoryException が発生している理由について何か提案はありますか?

4

1 に答える 1

1

onResume() で画像をロードし、onPause() で同じものをリサイクルできます。また、ビットマップを効率的にロードする必要があります

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

Loading scaled down version into memory トピックの下のリンクを確認してください。

メモリ管理については、リンクのビデオを確認してください

http://www.youtube.com/watch?v=_CruQY55HOk .

メモリ リークの原因を見つけるには、上記のリンクに示されているように MAT アナライザーを使用します。

アプリのヒープに十分なメモリがない場合、OutOfMemoryException が発生します。

onCreate() は、アクティビティが破棄されて再度アクティビティを開始しない限り、アクティビティのライフサイクル中に 1 回呼び出されます onCreate() は呼び出されません。

于 2013-05-01T14:34:03.247 に答える