2011-10-23 4 views
2

私が書いているアプリにダウンロードしたリソースを大量にロードしなければならないので、これはquestionを読んでいます。 .apkでそれらを持っている、そして質問への "正しい"答えは、パフォーマンスの低下はありませんが、あなたがそれが完了したときにメモリを解放することを心配する必要があります。Drawablesはメモリをネイティブにリークしますか?

誰でも自信を持って確認したり拒否できますか?私の印象は、ロードされたDrawableは、アクティビティがクリーンアップされたときに他のすべてと同様にGCedされたということでした。私はそれが真実でないかどうか、そしてそのインスタンスでメモリを手動で収集する最も信頼性の高い方法が何であるかを知りたいと思っています。

また、携帯電話のメモリと比べてSDカードからの画像の読み込みで顕著なパフォーマンスヒットがあるかどうかは知っていますか?私は電気工学者ではないので、直感的には、これはすべて固体メモリなので、すべて同じペースで読む必要がありますが、確かな答えを得たいと思います。

答えて

1

クイック答え:

ビットマップはクリーンアップするガベージコレクタの二つのパスを取ります。最初のパスはJavaオブジェクトを解放し、2番目のパスはネイティブピクセルデータを渡します。それらはリークしませんが、ポインタをヌルにしてGCが2回目の通過をヒットする間にメモリが不足することがあります。彼らがどんな資源から来ても、これは本当です。あなたとシステムの両方がそれらで処理されていると確信しているときは、常にビットマップ上でrecycle()を呼び出すことをお勧めします。 ジンジャーブレッドは、Dalvik VMのバグに起因するメモリ不足問題​​やビットマップの処理に特に悪いことです。

私の経験上、apkから画像を読み込むのは、SDカードよりもずっと高速です。 1)彼らはあなたのapkに合っていれば、あなたが持っているのであれば、apkで整列しています。 2)異なる電話機は、SDカードへのアクセス時間が異なります。一般的なルールは、それがSDカード上にある場合、SLOWLYにロードされることです。メインスレッドの内部メモリからドロワブルを読み込むことはできます(悪い考えですが)。あなたは、メインスレッドのSDカードから何もロードできません。いつも: - \

もし私があなただったら、画像を読み込むときにできるだけ怠け者になるでしょう。可能ならば私はそれらをapkに残しておきます。

+0

だから、apkの外からロードすることはできないと思うが(これは実行時にダウンロードするリソースによってスキンされるカスタマイズ可能なアプリケーションだ)、アプリケーションの起動時に電話機のメモリからドロワブル拡張されたApplicationクラスのメンバーですか? (複数のアクティビティで必要になります)。別のスレッドでは、アプリケーションが必ずしも正しく処理されないと言っていたので、これはメモリをリークする本当に良い方法のようですが、代わりに、すべてのアクティビティが起動時にアセットを再読み込みすることです。 –

関連する問題