ImageViewをプログラムで追加するLinearレイアウトが2つあります。imageView.setImageBitmap(ビットマップ)を使用しています。画像を設定します。そして、メモリ不足エラーが発生します。 https://developer.android.com/training/displaying-bitmaps/process-bitmap.htmlを読んだ後で、私は非同期タスクでイメージビットマップを設定することにしましたが、私はまだ同じエラーを受け取ります。このエラーは何度か一致しません。時には私はそれを取得しません。これは私のAsyncタスククラスのコードです。致命的な例外:非同期タスクAndroidのdoInBackground()メソッドのjava.lang.OutOfMemoryError?
class SetImageInAsync extends AsyncTask<String, String, ImageWrapper>{
ImageView imageView;
@Override
protected void onPreExecute() {
super.onPreExecute();
imageView = new ImageView(DisplayContent.this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
layoutParams.setMargins(16,16,16,16);
imageView.setLayoutParams(layoutParams);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
web_linearLayout.addView(imageView);
}
@Override
protected ImageWrapper doInBackground(String... params)
{
Uri image_uri = Uri.fromFile(new File("/sdcard/rreadyreckoner_images/" + params[0]));
Bitmap mBitmap = null;
try {
mBitmap = MediaStore.Images.Media.getBitmap(DisplayContent.this.getContentResolver(), image_uri);
} catch (IOException e) {
e.printStackTrace();
}
ImageWrapper w = new ImageWrapper();
w.bitmap = mBitmap;
w.filename = params[0];
return w;
}
@Override
protected void onPostExecute(final ImageWrapper imgWR) {
Bundle extras = getIntent().getExtras();
final String subcategory = extras.getString("subcategory");
imageView.setAdjustViewBounds(true);
imageView.setScaleType(TouchImageView.ScaleType.FIT_CENTER);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
imageView.setCropToPadding(false);
}
imageView.setImageBitmap(imgWR.bitmap);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
Intent intent = new Intent(DisplayContent.this,DisplayImage.class);
intent.putExtra("filename",imgWR.filename);
intent.putExtra("subcategory",subcategory);
startActivity(intent);
}
});
}
}
そして、これは私が取得エラーログです: -
09-27 15:10:07.587 10366-10898/com.inevitable.org.tab_sample E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.inevitable.org.tab_sample, PID: 10366
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:736)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:712)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:750)
at android.provider.MediaStore$Images$Media.getBitmap(MediaStore.java:830)
at com.inevitable.org.tab_sample.DisplayContent$SetImageInAsync.doInBackground(DisplayContent.java:236)
at com.inevitable.org.tab_sample.DisplayContent$SetImageInAsync.doInBackground(DisplayContent.java:216)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
私はプログラミングに新しいですので、任意のヘルプや提案がappreciated.Thankあなたです。
この行に問題があります。** mBitmap = MediaStore.Images.Media.getBitmap(DisplayContent.this.getContentResolver()、image_uri); **これをチェックしてくださいhttp://stackoverflow.com/questions/11381113/ mediastore-images-media-getbitmap-and-out-of-memory-error –
ありがとう@brahmyadigopula私はこのリンクを試しました。http://tutorials-android.blogspot.in/2011/11/outofmemory-exception-when-decodingあなたの提案されたlink.Nowからのhtmlは表示されますが、それらは歪んでいます。 – AndroidNewBee
そのブログをもう一度読んでください。** samplesize ** propertyはビットマップを取り、その高さと幅を元のサイズの20%(1/5)に縮小します。 inSampleSize N(この例ではN = 5)の値が大きいほど、ビットマップのサイズが小さくなります。 –