gpt4 book ai didi

java - 在方法中创建弱引用

转载 作者:行者123 更新时间:2023-11-29 03:41:27 26 4
gpt4 key购买 nike

我有以下方法,它有一个用户可以左右滑动的 ImageSwitcher。所选图像显示在屏幕中央。我已经在低内存手机上对高分辨率图像进行了一些图像缩放,但是当从左向右快速滑动时,我仍然遇到位图 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));
}

最佳答案

import java.lang.ref.WeakReference;

public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {

WeakReference r = new WeakReference(new String("I'm here"));
WeakReference sr = new WeakReference("I'm here");
System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
System.gc();
Thread.sleep(100);

// only r.get() becomes null
System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());

}
}

取自wiki Weak references

这是在 Java 中使用弱引用的方式 - 但这也意味着它在您的情况下不起作用,因为切换器必须显式接受 WeakReference 对象而不是 URI。

关于java - 在方法中创建弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com