ユーザーが左右にスライドできる 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));
}