关于Handler的执行流程是怎么的?
它的多线程是从哪开始分的?
在Runnable的run方法里头写个死循环,界面会卡住...
证明post进消息队列之后,线程还是只有一个??
必须得不停的post吗?
那么run方法里头的代码岂不是要尽量的短?
小弟对handler比较疑惑,敢情各位详述一下handler的执行过程...
(找了些教程,尽都是只有一个例子,没有说"为什么"的...)
它的多线程是从哪开始分的?
在Runnable的run方法里头写个死循环,界面会卡住...
证明post进消息队列之后,线程还是只有一个??
必须得不停的post吗?
那么run方法里头的代码岂不是要尽量的短?
小弟对handler比较疑惑,敢情各位详述一下handler的执行过程...
(找了些教程,尽都是只有一个例子,没有说"为什么"的...)
Handler()
Default constructor associates this handler with the queue for the current thread. If there isn't one, this handler won't be able to receive messages.如果你没有特殊的处理过的话,Handler都是在主线程中的,也就是GUI线程。一般要在onCreate中处理一些UI的初始话的话,使用默认的Handler还是不错的,可以让简单的界面先跑起来,然后给一个ProcessBar,等界面在handleMessage中构造好了,再关掉ProcessBar就好了。如果是要处理UI无关的逻辑,建议可以用Looper + Handler的方法。把Handler放在一个新的线程里处理。
可以看这个例子
http://hi.baidu.com/zhangtqqq/blog/item/62840117e8d9c511c83d6d67.html
一个类继承Thread类实现run()方法,通过start()即可实现多线程!
而Runnable,可以实现run(),但本身没有start()方法!通过观察,Thread类的构造方法,可以传递Runnable对象,所以要用Runnable启动一个新线程!
可以通过Thread构造!即Thread t=new Thread(Runnable对象);而hanlder就是多个线程之间数据的传递、处理!!本身处于UI线程,即主线程中!
因为我写一个runnable,里头写上button.setText("test");,然后用此Runnable创建Thread,然后setat;程序会出错;但在run里头写syso确不会出问题...
-------------
那android要怎样才能创建出一个合法的线程呢?
我也用looper试了试,确实能行。但也发现,一个looper维护一个线程,而且等要执行的语句运行完了,貌似结束looper以及其绑定的Handler还有点麻烦
各位使用多线程的时候都怎么用的?
写个简单的例子吧! private int i=0;
Handler myHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
button.setText(msg.arg1+"");,//处理消息,更行UI
}
} Runnable r=new Runnable() {
public void run() {
// TODO Auto-generated method stub
while(true)
{
i++;
Message message=new Message();
msg.arg1=i;//非UI线程中不能直接更新UI,即button.setText(i+"")是不行的
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myHandler.sendMessage(msg);
}
}
};启动线程:Thread t=new Thread(r);
t.start();
而且即使这样,handleMessage里面也不能做过多操作,不然也会卡死...