質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

3回答

8097閲覧

android:setBackgroundResourceで背景画像を設定する際のOutOfMemory

Junkuvo

総合スコア10

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/04/21 08:33

編集2016/04/21 09:38

AndroidアプリをJavaで実装しております。
あるActivityの起動時に下記の部分で背景画像を変更した際、OutOfMemoryとなってしまうことがあるようです。

layout.setBackgroundResource(R.drawable.bachground);

このActivityはいわゆるLINEのようなチャット画面で、その背景を変更したいのです。

OutOfMemoryをcatchした際は、背景画像を設定しない、という対応を考えているのですが、実際、皆さんどのように対応されているのか、また他にアイディアがあれば教えていただきたく質問させていただいた次第です。

画像は下記の通り用意してあります。
hdpi : 540 x 960
xhdpi : 720 x 1280
xxhdpi : 1080 x 1920

###その他考えたこと
XMLに指定すればメモリの取られ方が変わったりますか?
画像を1/4にするなどしてtileMode=repeatで繰り返し表示しても
背景としてのメモリは変わらないですよね?。。。。
オリジナルの画像をサンプリングしてから描画に渡す、という方法も考えたのですが、そもそも背景画像であり、拡大縮小する必要なしです。

エラーメッセージ

Fatal Exception: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(BitmapFactory.java)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785)
at android.content.res.Resources.loadDrawable(Resources.java:2008)
at android.content.res.Resources.getDrawable(Resources.java:681)
at android.view.View.setBackgroundResource(View.java:14468).....

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

AndroidManifext.xmlのapplicationタグにandroid:largeHeap="true"を設定するとアプリケーションに割り当てられる容量が増えます。増える容量は端末によって差があるので最終手段として考えて頂ければと思います。
参考url

投稿2016/04/22 08:44

編集2016/04/22 08:46
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそも背景画像であり、拡大縮小する必要なしです。

意図がよくわかりませんが、背景なので画質はどうでもいいということでしょうか

オリジナルの画像をサンプリングしてから描画に渡す

画像を扱う場合はOutOfMemoryには常に注意が必要だと思います
画像はbmpで扱われるのでサイズ(横x縦)という観点での
縮小するなどの対策がいいのではないでしょうか

しかも、アンドロイド機のヒープサイズは機種依存ですからそれなりに小さくしておく必要があると思います。(512x512程度?)

また、画像サイズが初めから分かっているのであればいいですが、不特定の画像が表示されるのであれば、optionを使った方がいいでしょう
http://y-anz-m.blogspot.jp/2012/08/android.html

実際にAndroid StudioのMonitorsでallocated memory, free memory が分かりますから
emulatorでメモリを変えて見れば確認できるのではないでしょうか

投稿2016/04/21 09:38

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Junkuvo

2016/04/21 11:24

説明が足りず申し訳ありません。ご意見ありがとうございます。 端末解像度hdpi, xhdpi, xxhdpiに対し、それぞれ背景画像を用意しており、拡大縮小なく描画したいと考えています。 下記の通り用意していれば、ぴったり背景に収まるという認識です。 hdpi : 540 x 960 xhdpi : 720 x 1280 xxhdpi : 1080 x 1920 オリジナルの画像解像度を落とすと、端末で表示した際に荒くなってしまうと考えていて、 それは避けたいです。
guest

0

画像のサイズを下げます。
現状ではどのような画像を表示しようとしていますか?

投稿2016/04/21 08:58

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Junkuvo

2016/04/21 09:05

ありがとうございます。下記の通り用意してあります。 hdpi : 540 x 960 xhdpi : 720 x 1280 xxhdpi : 1080 x 1920 4系以降でエラーとなっています。
yona

2016/04/21 09:34

容量はどれくらいですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問