学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方法是在主线程中执行的呢,主线程只是重写了一个方法啊,并没有在主线程中调用啊?求大神解决我的疑问,我对线程一直停留不是很理解,只是知道怎么用。
|