Android 開発に関する多くのブログとベスト プラクティスは次のように述べています。
「考えられるすべての密度に対してビットマップを提供する必要はありません。Android は現在の密度に合わせてビットマップを (通常はロード時に) スケーリングします。」
参考リンク:https ://plus.google.com/105051985738280261832/posts/6eWwQvFGLV8
試してみたらうまくいきました。しかし、私は一つのことを理解できませんでした。
たとえば、ビュー ページャーにそれぞれ約 1.5 MB の 5 つの全画面画像を含むサンプル アプリを作成しました。
Galaxy Tab 2 のような 7 インチ MDPI デバイス用の重いイメージを作成し、「drawable-large-mdpi」フォルダーに配置しました。少しぎくしゃくしていましたが、クラッシュすることはなく、すべての画像をスクロールできました。
今、ほぼ大型の HDPI デバイスである Nexus 7 でアプリを使用しようとしました。ビットマップのデコード中にアプリが「OOM エラー」でクラッシュしました。
*イメージを大きな MDPI から大きな HDPI に移動すると、両方のデバイスでクラッシュすることなく正常に動作します。*
だから私は2つの質問があります。
- この結果は、グラフィック アセットを最も密度の高いドローアブル フォルダーに配置して、その範囲内で自動的に縮小することしかできないという傾向がありますか?
- 初めてクラッシュした理由は内部でどうなりますか?