新しく導入されたDisplay size
OS設定が大きすぎる値に設定されていると、Android Nで起動時にクラッシュする公開アプリがあります。
Logcatを見ると、次のメッセージが表示されます。
Java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.
最初のアクティビティで、素敵な大きな背景画像を表示するImageViewに問題をトレースしました。問題の画像は2048x1066で、私の汎用drawables
ディレクトリにあるため、密度に関係なく、この画像が使用されます。
Display size
設定がSmall
の場合、すべて正常に機能します。しかし、Default
に移動すると、機能しなくなります。その後、イメージを小さいイメージと交換すると、Default
で機能しますが、Large
に移動すると、機能しなくなります。
私の推測では、Display size
upを調整すると、デバイスは、ピクセル密度が高く、物理的に小さいデバイスのように動作します。しかし、私はここで何をすべきかを理解していません。解像度を段階的に上げるために画像を段階的に小さくすると、実際の大きなディスプレイでは見栄えがよくなくなります。それとも私は何かを理解していないのですか?
どんなポインタでも大歓迎です。
私の場合、(高解像度)スプラッシュビットマップをdrawableからdrawable-xxhdpiに移動することが解決策でした。
同じ問題がありました。アプリの起動時にが表示されるため、スプラッシュスクリーンに問題があるとは思わなかったが、スプラッシュスクリーンに問題があることが判明した。
私の場合のスプラッシュ画面の解像度はxxhdpiで、誤ってdrawable-xxhdpiではなくdrawableフォルダーに配置されました。これにより、Androidは、スプラッシュスクリーンの解像度がmdpiであると想定し、画像を必要なサイズの3 * 3倍にスケーリングし、ビットマップを作成しようとしました。
私はそれが誰かを助けるだろうかわかりませんが、私はそれをここに残します。私の場合-問題はAndroid 7のSumsungデバイスでのみ発生し、問題はスプラッシュスクリーンのプロポーションにありました。高さを1024ピクセルに変更した後-すべてが正常に動作します
ドロアブル内の画像をmipmap-xxhdpiに移動します。画像はビットマップ形式であるため、mipmapフォルダーに画像を配置する必要があります。
私の場合、マニフェストファイルのapplicationg
にAndroid:hardwareAccelerated="false"
を追加して問題を解決しました。
Bitmap.Factoryクラスを使用してみてください。このリンクはあなたを助けます 大きなビットマップを効率的にロードする
私の場合、Paint3dを使用して、背景で使用される画像のキャンバスを変更しました(または、他のものを使用できます)。 ここでスクリーンショットを共有しているだけです。
アイコンファイルが大きすぎるため、Androidを効率的かつスムーズにロードできません。 Androidは、スマートアルゴリズムでこれを認識します。
Final Android Resizer by asystatを使用して、アイコンファイルのサイズを変更できます。それらを「xhdpi」以下にサイズ変更します。
サイズ変更した写真をドロアブルに配置するか、既存の大きなアイコンファイルを上書きします。
これで完了です。
グライドを使用していて、一度に1k枚の画像またはいくつかの画像を読み込んでいる場合は、グライドまたは画像ビューの設定に使用しているものが問題です。グライドにスケールタイプを適用するだけで解決できます。