android编程中thread, run, handler,之间关系。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android编程中thread, run, handler,之间关系。相关的知识,希望对你有一定的参考价值。

new Thread(this).start();

@Override
public void run()
// TODO Auto-generated method stub
Looper.prepare();
//RefreshHandler handler=new RefreshHandler();
while (!Thread.currentThread().isInterrupted())
//通过发送消息更新页面
Message m=new Message();
m.what=0x101;
handler.sendMessage(m);
try
Thread.sleep(100);
catch (InterruptedException e)
// TODO: handle exception
e.printStackTrace();


Looper.loop();


class RefreshHandler extends Handler

@Override
public void handleMessage(Message msg)
// TODO Auto-generated method stub
if (msg.what==0x101)
v.update();
v.invalidate();

super.handleMessage(msg);



当Thread.start()启动后,程序的执行顺序是怎么样的?
start之后run被启动?之后handler又是什么时候被调用的?还有程序如何循环工作?
由于没学过Java,对此知识点有点疑问。

参考技术A 首先this这个类实了runnable接口,run方法在thread.start()后自动被调用,这里是thread和runnable之音协定,这也是接口意义所在。由于是在子线程中操作的,子线程无法操作属于ui线程的权力,所以run方法走完后,需要通过handler发送消息在ui线程,完成ui的刷新。

顺序是:

new Thread(this).start();

run()

handler.sendMessage(m);

handleMessage(Message msg)追问

之后怎样完成再调用以及循环的?

invalidate更新的是run么?类外也能更新么?

invalidate更新的是run么?类外也能更新么?

追答

不是在run方法里面,是在
class RefreshHandler extends Handler
@Override
public void handleMessage(Message msg)
// TODO Auto-generated method stub
if (msg.what==0x101)
v.update();
v.invalidate();

super.handleMessage(msg);

追问

sendmessage之后handler当时就被启动?还是等run完再被启动?run方法可在程序任何地方用invalidate更新么?

追答

sendmessage之后handler就被启动了,run方法中有循环,完没完都没事事,只要sendmessage了。在这种情况下,invalidate只能在handleMessage处理,因为子线程无法直接操作ui.

本回答被提问者采纳
参考技术B 你说呢...

以上是关于android编程中thread, run, handler,之间关系。的主要内容,如果未能解决你的问题,请参考以下文章

Android多线程编程

Xamarin Android - Task.Run vs Task.Factory.StartNew和Thread.CurrentPrincipal

java 多线程编程

eclipse中做android游戏如何创建Thread(线程)

Java_多线程并发编程基础篇—Thread类中start()和run()方法的区别

Android中的多线程编程附源代码