2

設定したい壁紙をユーザーが選択できる機能も備えたアプリを作ろうとしていました。私はギャラリーインテントを呼び出すことによってこれを管理しました。ユーザーが特定の画像を選択すると、画像のデータパスが返され、画像を画像ビューに設定してユーザーにプレビューします。

画像サイズ(および/または解像度)がAndroidの予想よりも大きい場合、問題が発生します。これにより、モジュールに障害が発生します。

そして、これでは不十分であるかのように、ユーザーが他の壁紙を選択しようとすると(私のテストケースでは、「他の」壁紙のサイズも700kbを超えていました)、アプリが「OutOfMemoryException」でクラッシュします...

ここで私を助けてください!!!

ギャラリーインテントの場合、私は以下を使用します。

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_IMAGE);

私が使用する壁紙を設定するために:

InputStream is = getContentResolver().openInputStream(Uri.parse(uri_returned_from_intent)); 
Bitmap bgImage = BitmapFactory.decodeStream(is);//OutOfMemory error thrown here
setWallpaper(bgImage);

だから私は対処すべき2つの問題があります:

  1. 壁紙として設定する前に画像を切り抜く方法...
  2. OutOfMemoryExceptionがスローされることを理解できません。私の画像サイズはどれも1MBを超えていません...そして、Mが間違っていなければN1の場合のVMバジェットは24Mbだと思います...
4

1 に答える 1

3

メモリ消費を減らすために、inSampleSizeオプションを使用してデコードする必要があります。

別のオプションinJustDecodeBoundsは、正しいinSampleSize値を見つけるのに役立ちます

于 2010-06-14T06:51:49.027 に答える