此篇又是另外一种实现了,采用 handler.post(Runnable r); 去实现。
int[] images = { R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,
R.drawable.pic3, R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,
R.drawable.pic7, R.drawable.pic8, R.drawable.pic9 };
ImageView iv;
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
iv = (ImageView)findViewById(R.id.imageView1);
}
private int num = 0;
private Runnable r;
//模拟按钮 进行耗时操作
public void changImage(View v) {
Log.i("===","===== "+Thread.currentThread().getName()); //得到当前线程名字
switch (v.getId()) {
case R.id.button1:
// 通过post方法告诉handler
// 让其去执行参数中Runnable对象的run方法
r = new Runnable() {
@Override
public void run() {
// 在这里可以直接操作UI页面
iv.setImageResource(images[num % images.length]);
num++;
// 等待1秒之后再次执行参数一的runnable对象对应的run方法
handler.postDelayed(this, 1000);
/*
* 注意,当前的代码,虽然看着实在子线程,但是通过currentThread方法获知
* 当前其实是主线程
* 在此处不要去执行时间太长的耗时的操作
* */
Log.i("===","===== ppo "+Thread.currentThread().getName());
}
};
handler.post(r);
break;
case R.id.button2:
//将指定要执行的runnable对象移除,不再执行
handler.removeCallbacks(r);
break;
}
}
对于,代码里面出现的新的方法,再次不在多余赘述。后面将会理论知识出现。