私はimageView
でアクティビティを持っています。デバイスを回転させると、onCreate
はバックグラウンドスレッド内でビットマップの作成を開始します。いくつかの回転の後、ビットマップの作成にはOutOfMemoryError
があります。 これを修正する正しい方法は何ですか? weak references
での決定はありますか? ここに私のコードです:Android。回転時に観測可能なビットマップ作成時のOutOfMemoryエラー
public class ImageActivity extends AppcompatActivity implements View.OnTouchListener {
private ImageView imageView;
private Disposable imageDisp;
@Override
public void onDestroy() {
imageDisp.dispose();
super.onDestroy();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
imageView = (ImageView) findViewById(R.id.main_imageview);
String source = getIntent().getStringExtra("source");
imageView.setImageBitmap(null);
imageView.setTag(source);
imageDisp = Observable.fromCallable(()->{
File outputFile = new File(source);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap b = BitmapFactory.decodeFile(outputFile.getPath(), options); // here I have a outOfMemory
outputFile.delete();
return b;
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(bitmap -> {
imageView.setImageBitmap(bitmap);
imageView.setOnTouchListener(ImageActivity.this);
},
throwable -> Toast.makeText(this, String.valueOf(throwable.getMessage()), Toast.LENGTH_SHORT).show());
}
}
ビットマップのサイズはどのくらいですか? Bitmap Options inSampleSizeで縮小する必要があるかもしれませんか? – Dimezis
私の活動で大きなイメージが必要です。それは約5mpです。 – Rainmaker