考虑这个 fragment 。
private String global_s;
public void onClick(View v) {
global_s = "String";
new Thread(new Runnable() {
public void run() {
final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
ImageView mImageView = (ImageView) findViewById(R.id.imageview);
mImageView.setImageBitmap(bitmap);
final String local_s = global_s;
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(local_s);
});
}
}).start();
}
线程结束后,位图引用是否仍然存在(不被垃圾收集器收集)?因为它是在 mImageView 上分配的。
另外,local_s 怎么样?它的引用会被替换为 global_s 引用吗?
最佳答案
bitmap
和 local_s
都是局部变量,因此在 run()
结束后立即处理(想想毫秒)。然而,Bitmap 和 String 对象可能会作为实例字段存储在 ImageView 和 TextView 对象中,共享它们的生命周期(想想几秒)。
关于local_s
和global_s
之间的链接:local_s
捕获赋值时global_s
的值但几乎没用,因为它会立即传递给 .setText()
- 请注意,Java 始终按值传递,因此会立即创建另一个副本并将其传递给 .setText()
> 可能会将其存储在一个实例字段中,该实例字段在绘制时读取以呈现文本。
关于java - Java线程中变量的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979324/