public void run() {
// TODO Auto-generated method stub
while (isPlay) {
Message msg = handler.obtainMessage(UPDATE, cur_index, 0);
handler.sendMessage(msg);
// 更新时间间隔为 2s
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cur_index++;
}
}
请问这段重写的run()函数会在什么时候开始运行?我并没有在.class里看到有地方调用这个函数。是不是while (isPlay)为真就开始自动运行run?
还有handler.obtainMessage这个函数是什么作用,那个三个参数是什么东东?private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
if (msg.what == UPDATE) {
gallery.setSelection(msg.arg1); //设置要显示的图片
}
super.handleMessage(msg);
}
};
还有一段代码是这样的,是不是这个update有关?~程序是先运行哪个呢javarun()handlerhandleMessage

解决方案 »

  1.   

    1、请问这段重写的run()函数会在什么时候开始运行?我并没有在.class里看到有地方调用这个函数。是不是while (isPlay)为真就开始自动运行run?
    run应该是Thread的方法,你应该找何处实例化了这个Thread,通过start方法可以执行Thread的run方法。
    建议楼主温习下Java的线程第二个问题,建议楼主学习Android的消息机制这些都是基本知识
      

  2.   

    run应该是线程方法,你看一下有没有线程start()方法,这个start()方法运行起来就会执行到run(),睡眠2s执行一次,至于handler.obtainMessage,这个是android里面的消息机制,因为线程不能直接与前端UI进行交互,只能通过消息通知对前端UI进行操作!
      

  3.   

    如果run()方法是一个线程的方法,你需要创建这个线程,并执行start()方法,线程会自动调用run()方法。
    按你代码所示,你的run()方法每2秒会执行一次,只到isPlay=false时退出线程。你的线程方法run()中,每次执行是发了一次消息,这是android的消息机制,系统收到消息后,会自动调用handleMessage()接收,你需要在此方法中进行处理。