我有以下方法,它有一個ImageSwitcher,用戶可以左右滑動。所選圖像顯示在屏幕中央。我在低內存手機上對高分辨率圖像進行了一些圖像縮放,但當從左向右快速滑動時,我仍然遇到了Bitmap OutOfMemoryEexception。我想改變行mSwitcher.setImageURI(myUri);
(這是導致OOME的行)使用弱引用,以便它可以自動垃圾收集。我怎樣才能做到這一點?這是性能優化此方法的最佳方式嗎?在方法中創建弱引用
感謝
方法:
public void onItemSelected(AdapterView parent, View v, int position, long id) {
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyAppName");
File[] cachedOnSDImages = mediaStorageDir.listFiles();
countArray = new Integer[cachedOnSDImages.length];
fileArray = new String[cachedOnSDImages.length];
fileArray[position] = cachedOnSDImages[position].getAbsolutePath();
Uri myUri = Uri.parse(fileArray[position]);
mSwitcher.setImageURI(myUri); // weakly reference myUri in this line
this.currentpos = position;
}
我要補充的mSwitcher在此實例:
private void makeSwitcher() {
mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
mSwitcher.setFactory(this);
mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
}
[如何在Java和Android中使用WeakReference](https://stackoverflow.com/a/47027492/3681880) – Suragch