私は人のルックアップキーが指定されたアンドロイドで連絡先の写真を取得するには、次の機能を使用します。のOutOfMemoryErrorのAndroidで連絡先の写真を表示する(ビットマップのサイズはVMの予算を超過)
public Bitmap getContactPhoto(String lookup_key) {
Uri lookUpUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup_key);
Uri contentUri = ContactsContract.Contacts.lookupContact(ctx.getContentResolver(), lookUpUri);
InputStream stream = null;
try {
stream = ContactsContract.Contacts.openContactPhotoInputStream(ctx.getContentResolver(), contentUri);
}
catch (Exception e) {
}
if (stream != null) {
return BitmapFactory.decodeStream(stream, null, bitmapOptions);
}
else {
return null;
}
}
私はそれらの連絡先を表示する場合これはおよそ27メガバイトを持っていた私のアプリは、ヒープ3MBのが、単一のビットマップについて使用できることを意味してい
Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=6023KB, Allocated=3002KB, Bitmap Size=27152KB)
:リストビューの写真は、私は時々デベロッパーコンソールのクラッシュレポートに次のエラーを読んで?
私はのOutOfMemoryエラーについて、ここでスタックオーバーフローに関する質問をたくさん読んで、それは約主だった:ガベージコレクタがリソースをスケーリングする必要がある
私のケースではどのようにエラーを防ぐことができますか?私は連絡先の写真を取得するだけなので、スケーリングしなければならない巨大なビットマップがあるかどうかはわかりません。文脈を漏らすことは、ここではそうではないようです。
これは、画像が表示されている方法です。
imageView.setVisibility(View.VISIBLE);
imageView.setBackgroundResource(R.drawable.background);
if (<BITMAP_OBJECT> != null) {
imageView.setImageBitmap(<BITMAP_OBJECT>);
}
else {
imageView.setImageBitmap(null);
}
問題はあなたが表示しているものとは関係ありません。 getContactPhoto()が – Blackbelt
と呼ばれる場所にコードを添付してください申し訳ありませんが、これを今追加しました。 – caw
あなたは何らかの種類のアダプタで投稿した最後のスニペットを呼び出しますか? – Blackbelt