昨天刚看了Handler和HandlerThread这个东西,不明白为什么要用这么复杂的东西,而且Handler直接post的话好像还不是子线程运行。那我再开发的时候直接用Thread行不行?两个有什么区别?

解决方案 »

  1.   

    个人理解handler就是把thread封装了一下,自己实现也可以,但是自己要实现消息传递机制
    如果不对,楼下的correct me
      

  2.   

    Handler是可以实现线程间通信的,LZ知道Android的UI线程不安全的吧,也就是说不可以在UI线程以外的其他线程对UI进行更新设置操作,但是有时候又不能再UI主线程进行一些耗时操作,那样UI会响应很迟钝的,这时候就会新开一个线程,新开的线程可以通过Handler来把处理的结果由消息传回UI主线程,在UI主线程里进行相关的UI更新等等~
      

  3.   

    Handler就是android中一个机制,主要是考虑到线程安全的!
      

  4.   


    还是有些不明白,意思是如果我自己写一个线程,把UI传进去,那再新线程中是不能操作UI的?
    另外,如果我不操作UI,只是做一些其他的后台操作,能否用Thread而不用Android提供的Handler?
      

  5.   

    1。新线程是不能操作UI主线程的
    2. 如果不操作UI,可以只用Thread
      

  6.   

    如果你在UI中起了线程,这时你在线程中做完某些处理后想进行UI的操作(如:更新界面),这时,你有两种方法。
    1,在线程中直接调用UI中的方法来更新UI,这时会报错,因为Android是非线程安全的,因为子线程在更新UI的同时主线程也可能在更新UI,这样的话因为是非线程安全因此可能会出错,所以Android规定不可在子线程中执行更新UI的操作。
    2,子线程可以发送消息(sendMessage)给主线程,由主线程自己更新自己,这就用到Android的Handler消息管理机制了。具体Handler的用法网上很多。
    当然如果线程中没有UI操作那就不需要发送什么消息给主线程了。
    与Handler完成相同功能的还有AsyncTask,是Android提供的一个异步类,它在执行完线程操作后会直接跳回主线程,用法网上很多。
      

  7.   

    纯个人感觉,THREAD一般都是和UI没联系的,HANDLER我个人感觉就是一个桥梁,THREAD读出数据然后send一个message给handler来实现和UI的交互
      

  8.   

    我也这么认为,不过感觉还是Thread好用,起码学到现在为止感觉还是会使用Thread,可能学习的不够深吧
      

  9.   

    我原来学的时候啥线程都不会,后来做android一次读大量图片直接把我搞得离死不远了……现在碰见个东西就想线程……
      

  10.   

    handler post仍然是在ui线程中启动,没有启到多线程的作用。
    你要使用多线程可以直接用Thread 然后thread.start
    但是HandlerThread是重新启动线程和handler不一样,可以说和thread起到同样的功能
      

  11.   

    当你需要做一些比较耗时的动作时,为了防止UI卡住,就要新开一个线程来做.情况1:如果线程里面不需要更改UI,那就随意了.
    情况2:如果线程里面需要更改UI,那就要用到handler,利用handler传送消息.
      

  12.   

    我的理解:
    理解Handler最好是要结合Looper和MessageQueue。
    handler的发送message和task只是往某一个looper的MessageQueue注入一项。
    Looper是和thread结合的,就是一个事件循环。当该线程回到其事件循环时,之前注入的项就会得到执行。
    至于在哪个线程里执行,要看handler发送到哪个线程的looper了,创建handler时都会绑定一个looper(ui线程是自动绑定的),handler发送的message等都会在该looper的线程得到处理。
    如果你有Qt的开发经验就很容易理解,这跟Qt的信号槽几乎是如出一辙。
      

  13.   

    http://blog.csdn.net/androidbluetooth/article/details/6384641不是很复杂,推荐你看看上面一篇文章。
      

  14.   


    如果你不需要跟UI线程进行交互的话是可以用thread的啦~
      

  15.   

    解释的不错,在我使用当中handler主要是对message发送,接受和处理。不仅仅本身的message,有时候还是其他线程的message。