サムネイル取得(getThumbnail)の処理がときどき重い件

658 views
Skip to first unread message

nina

unread,
Jul 26, 2011, 10:05:42 AM7/26/11
to 日本Androidの会
いつもお世話になっております、ninaです。

サムネイル画像を一覧表示させるアプリを開発中なのですが、
サムネイル取得の処理が重いときがあり、原因を究明中です。。
具体的に、以下のようにプログラムしています。

Bitmap bitmap = Images.Thumbnails.getThumbnail(contentResolver, id,
Images.Thumbnails.MICRO_KIND, null);
画像のidはMediaStore.Images.MediaのDBから引っ張ってきています。

実機を使って開発しているのですが、
端末起動時、SDがマウントされ、MediaScanが開始され、/sdcard/DCIM/.thumbnailsフォルダに
MINI_KINDのサムネイルが作られていくはずです。
それらの処理が終わった(と思われる)後に、アプリを起動しているにも関わらず、サムネイル取得が重いのです。

frameworks配下のコードまで追っていったのですが、
MediaStore.javaのgetThumbnail()内でbitmapがnullとなっており、実際のデータのfilePathをもとに
サムネイルを作成している分岐に入っていることが分かりました。
"Create the thumbnail in memory"と書かれている部分の処理です。
この分岐に入ってしまうと、大変重くなります。

・なぜ、.thumbnailsフォルダに既にサムネイルがあるにも関わらず、こちらの分岐に入ってしまうのか
・この分岐に入らせないようにはどうすればいいのか
・この分岐に入ってしまう条件
・その他解決策

分かる方がいましたら教えていただけないでしょうか。

hkondo

unread,
Jul 29, 2011, 2:54:49 PM7/29/11
to 日本Androidの会
nina様

細かいことですが、
> Bitmap bitmap = Images.Thumbnails.getThumbnail(contentResolver, id,
> Images.Thumbnails.MICRO_KIND, null);
こちらMICRO_KINDを指定しておりますが、よろしいのでしょうか。

以前作成したアプリでは下記のようなoptionsを指定して取得しており、画像1枚だったためか重いとは感じませんでした。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inTargetDensity = DisplayMetrics.DENSITY_XHIGH;
options.inDensity = DisplayMetrics.DENSITY_XHIGH;
options.inScaled = true;

参考になれば幸いです。

hkondo
Reply all
Reply to author
Forward
0 new messages