私はAndroid.Graphics.Bitmap
のリストを公開しているビューモデルを持っています(もっと良いことがあれば、ありがとう)。サンプル画像リソース(描画可能フォルダに追加)だけでビットマップのリストを入力しますか?
実際には、(バイトで表される)サービスからイメージデータが取得され、その後、バイトはAndroid.Graphics.Bitmap
に変換されます。問題があるかどうかを調べるためにそのケースをテストしていません。現在開発中(クライアント側)のプロセスでは、drawable
フォルダにサンプル画像リソースを1つだけ追加したいと考えています。イメージを表示するのに役立つリソースIDのリストが公開されている場合は、すべて問題ありません。しかし、どのような露出はAndroid.Graphics.Bitmap
のリストであり、私はこのように、ビットマップに加え、画像リソースIDを変換するBitmapFactory.DecodeResource
方法を用いて試みた:
//in the context of some Activity
var images = new List<Bitmap>();
for(var i = 0; i < 30; i++){
var bm = BitmapFactory.DecodeResource(Resources, Resource.Drawable.SampleImage);
images.Add(bm);
}
上記OutOfMemoryException
(ラインvar bm...
で投げ実行するコード)。
私はAndroidプログラミングの初心者ですから、この問題を解決することは本当に難しいです。例外は明らかですが、メモリが限られているように見えますが、イメージのサイズ、解像度などを減らしてコードを実行するのは嫌いです(リソースIDを介してイメージを表示するとすべてがうまく、イメージが表示されるそれは品質の低下なしにすべきである)。私は、Java開発者もこれを助けることができると思います
、ここでは、Javaのコードは次のとおりです。
//don't need to add the bitmap to any list, just like this will
//throw the exception
for(int i = 0; i < 30; i++){
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.sampleImage);
//...
}
はあなたの助けをありがとう!
UPDATE私の深いデバッグパー
は、例外は第20回ループ(I = 19)でスローされます。また、私が使用しているデバイスは、エミュレータ(Android用のVisual Studioエミュレータ)です。おそらく、エミュレータの制限のいくつかの種類です。私はそれが実際の物理的なデバイスのためにどのようになるか分からない。しかし、私はエミュレータで多くのアプリ(3Dゲーム)を走らせることができるので、エミュレータはうまくいくようです。
は、ループ条件が「i <30」であることを意味していますか?本当に 'Bitmap'sが必要なのか' Drawable'はうまくいくのですか? – oldrinb
@oldrinbはい、ありがとう、それはタイプミスです、私はすべてをタイプし、コピーして貼り付けませんでした。 – Hopeless
このビットマップデコードループはどのくらいの頻度で発生しますか?一度? – oldrinb