A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任亚俊 中级黑马   /  2013-12-19 17:01  /  807 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学Android消息传递机制时看到一个案例,程序的功能是周期性的改变ImageView中的图片,程序的难点是在Android应用中UI线程是主线程,不能在UI主线程中执行耗时的操作,所以要实现这个程序的功能,必须想到一种能在子线程中改变主线程中View的方法,Android提供的一种方法是使用Handler,代码如下:
  1. public class HandlerTest extends Activity
  2. {
  3.         // 定义周期性显示的图片的ID
  4.         int[] imageIds = new int[]
  5.         {
  6.                 R.drawable.java,
  7.                 R.drawable.ee,
  8.                 R.drawable.ajax,
  9.                 R.drawable.xml,
  10.                 R.drawable.classic
  11.         };
  12.         int currentImageId = 0;

  13.         @Override
  14.         public void onCreate(Bundle savedInstanceState)
  15.         {
  16.                 super.onCreate(savedInstanceState);
  17.                 setContentView(R.layout.main);
  18.                 final ImageView show = (ImageView) findViewById(R.id.show);
  19.                 final Handler myHandler = new Handler()
  20.                 {
  21.                         @Override
  22.                         public void handleMessage(Message msg)
  23.                         {
  24.                                 // 如果该消息是本程序所发送的
  25.                                 if (msg.what == 0x1233)
  26.                                 {
  27.                                         // 动态地修改所显示的图片
  28.                                         show.setImageResource(imageIds[currentImageId++
  29.                                                 % imageIds.length]);
  30.                                 }
  31.                         }
  32.                 };
  33.                 // 定义一个计时器,让该计时器周期性地执行指定任务
  34.                 new Timer().schedule(new TimerTask()
  35.                 {
  36.                         @Override
  37.                         public void run()
  38.                         {
  39.                                 // 发送空消息
  40.                                 myHandler.sendEmptyMessage(0x1233);
  41.                         }
  42.                 }, 0, 1200);
  43.         }
  44. }
复制代码

我的疑问是:为什么说handleMessage方法是在主线程中执行的呢,主线程只是重写了一个方法啊,并没有在主线程中调用啊?求大神解决我的疑问,我对线程一直停留不是很理解,只是知道怎么用。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

1 个回复

倒序浏览
虽然看不见起调用,但确实使用着了,那个方法确实是运行了,可能实在从父类继承的方法中使用到了,你可以看看其父类源码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马