22

AdMob SDKが使用しているように見えるメモリの量と、このメモリが実際にどこにあるかについて混乱しています。説明させてください。

私のアプリには、無料と有料の 2 つの種類があります。無料版には AdMob 広告がありますが、それ以外のコードはほぼ同じです (一般的な Android ライブラリを使用)。

Nexus 4 (Android 4.2.1) でアプリを実行し、メモリ使用量を比較しました。デバイス設定 > アプリ > 実行中のアプリで使用されているシステム メモリを確認します。また、GC logcat メッセージで報告された Dalvik ヒープ メモリと、HPROF ファイルの使用も調べます。

有料版を実行すると、次のことがわかります。

  • システムメモリ:約16MB
  • Dalvikヒープサイズ:約10MB

無料版を実行すると、次のように表示されます。

  • システムメモリ:約29MB
  • Dalvikヒープサイズ:約11MB

つまり、dalvik ヒープ サイズは両方のバージョンで似ています。しかし、実際に使用されるシステム メモリ10MB 以上です

メモリ プロファイリング ( http://www.youtube.com/watch?feature=player_embedded&v=_CruQY55HOk ) について学習し、HPROF ファイルを何時間もかけてリークの可能性を排除した結果、結論は 1 つしかわかりません。

AdMob によって使用される 10 MB の余分なシステム メモリは、実際にはネイティブ メモリであり、dalvik ヒープの外部で malloc を使用して割り当てられます。

今、私は2つのことについて疑問に思っています:

  1. 無料版のシステム メモリは有料版よりも 10 MB 大きいため、メモリ不足の場合に OS によって強制終了される可能性がはるかに高いと思います。または、Android OS は、どのアプリを強制終了するかを決定するために Dalvik ヒープのみを考慮に入れますか?
  2. AdMob SDK を調整して割り当て可能なメモリ量を選択する方法はありますか?

どうもありがとう

4

2 に答える 2

14

AdMob は WebView を使用して広告を読み込みます。これは、ネイティブ ライブラリを使用する非常に複雑なオブジェクトであり、クラッシュする傾向があります。AdMob SDK は、管理しやすいように非常に努力していますが、その動作を実際に制御することはできません。さらに、メモリ使用量はおそらく広告の種類 (HTML テキストの広告と画像付きのバナーなど) によって異なります。

したがって、AdMob (オープン ソースではない) にバイナリ パッチを適用する意思がない限り、それを受け入れるしかありません。を積極的に削除して破棄AdViewし、リークを減らすことができますが、それ以上のことはできません。

于 2013-01-30T02:20:46.357 に答える