以andorid onCreate方法为例
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress_bar);
final ProgressBar progressBar = findViewById(R.id.pg_1);
new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 100; i++) {
Thread.sleep(1000);
progressBar.setProgress(i + 1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
这样写的实现目标是,希望修改外部变量progressBar;
程序的真正实现过程是把外部变量,复制一份到内部类的成员变量中,
//模拟代码
class MyRunable{
private ProgressBar progressBar;
MyRunable(ProgressBar bar){
this. progressBar=bar;
}
@Override
public void run() {
try {
for (int i = 0; i < 100; i++) {
Thread.sleep(1000);
progressBar.setProgress(i + 1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
引用类型,在内部类做出改变后渲染到外部类上,需要保证引用不发生改变。基本类型,外部类修改了其值,内部类用的还是已复制好的数据。这样期望相同的发生了变化。