4

私はAndroid2.2以降用のグラフィックを多用するアプリケーションを開発しています。

Honeycomb以降、ビットマップはネイティブのビットマップヒープではなくVM_HEAPに保存されることを知っています。

これは、アプリケーションの有効なメモリ使用量に影響しますか?たとえば、Honeycomb以前のデバイス用のアプリがX MBのVMヒープを使用し、Y MBのビットマップ(ネイティブヒープに保存されている)がある場合、VMヒープからX +YMBの使用が開始されないことを願っていますHoneycomb以降のデバイスにインストールされている場合。

これは論理的に聞こえません。代わりに、Honeycombの前でもビットマップサイズがVM制限に対してカウントされると思います。そうでない場合、「ビットマップサイズがVMバジェットを超えています」というエラーが表示されるのはなぜですか。したがって、それらはネイティブヒープに格納されますが、VM_HEAPの最大サイズに対してカウントされます)。

4

2 に答える 2

3

私も心配していましたが、その間にグーグルから回答があり、次のような仮定が確認されました。

「これは論理的に聞こえません。代わりに、Honeycombの前でもビットマップサイズがVM制限に対してカウントされると思います。そうしないと、「ビットマップサイズがVMバジェットを超えています」というエラーが表示されるので、ネイティブヒープに保存されますが、カウントされます。 VM_HEAPの最大サイズに対して)。」

Romain Guy(Androidフレームワークエンジニア)からの回答:

「その通りです。アプリはHoneycombの前後で同じ量のメモリを使用します。」

于 2012-05-21T01:53:23.783 に答える
0

AFAIKハニカムに変更されました。ビットマップは、以前のバージョンのようにネイティブヒープではなく、dalvikヒープ(VM_HEAP)に保存されるようになりました(おそらく彼らはもうSKiaGCに依存したくなかったからです)

2.2でうまく機能するビットマップは、タブレットで同じ画像がより多くのピクセルを使用するため、3.0でOOM例外が発生する可能性があるため、ビットマップの管理をより真剣に行う必要があります(4.0には適用されない場合があります。確かではありません)。

于 2012-05-20T18:04:18.547 に答える