黑马程序员技术交流社区
标题:
关于Handler的疑问
[打印本页]
作者:
任亚俊
时间:
2013-12-19 17:01
标题:
关于Handler的疑问
学Android消息传递机制时看到一个案例,程序的功能是周期性的改变ImageView中的图片,程序的难点是在Android应用中UI线程是主线程,不能在UI主线程中执行耗时的操作,所以要实现这个程序的功能,必须想到一种能在子线程中改变主线程中View的方法,Android提供的一种方法是使用Handler,代码如下:
public class HandlerTest extends Activity
{
// 定义周期性显示的图片的ID
int[] imageIds = new int[]
{
R.drawable.java,
R.drawable.ee,
R.drawable.ajax,
R.drawable.xml,
R.drawable.classic
};
int currentImageId = 0;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView show = (ImageView) findViewById(R.id.show);
final Handler myHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// 如果该消息是本程序所发送的
if (msg.what == 0x1233)
{
// 动态地修改所显示的图片
show.setImageResource(imageIds[currentImageId++
% imageIds.length]);
}
}
};
// 定义一个计时器,让该计时器周期性地执行指定任务
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
// 发送空消息
myHandler.sendEmptyMessage(0x1233);
}
}, 0, 1200);
}
}
复制代码
我的疑问是:为什么说handleMessage方法是在主线程中执行的呢,主线程只是重写了一个方法啊,并没有在主线程中调用啊?求大神解决我的疑问,我对线程一直停留不是很理解,只是知道怎么用。
作者:
刘松703
时间:
2013-12-19 17:20
虽然看不见起调用,但确实使用着了,那个方法确实是运行了,可能实在从父类继承的方法中使用到了,你可以看看其父类源码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2