最近看android编程源代码时,看到关于UI界面更新的实现方法,哪位大侠在这方面有总结的,忘能给小弟说一下有哪些基本方法及其实现原理。在这里我接触了两个线程类型的,一个是通过hander invalidate通知UI主线程, 还有一个是用view的postInvalidate通知UI主线程。我对这两个方法都是才接触,希望能指点一下,不限于这两个方法, 谢谢。 

解决方案 »

  1.   

    还可以使用AsyncTask,这个在使用后台与UI进行交互数据的时候用得比较多。
      

  2.   


     Handler适用于简单的后台处理完成后更新UI的操作,比如与远程Webservice交互数据时就不适用。一般使用webservice或者其它远程服务器进行交互数据的都用ASyncTask进行处理。而postInvalidate一般情况 下是不怎么用,一般用到postInvalidate的情况都是在UI里面直接发送postInvalidate(也就是单击某一个控件或者按钮时,直接发送postInvalidate消息)
      

  3.   

    嗯,在看一个简单的程序代码,里面实现的UI界面更新确实用的postInvalidate实现的很简单的那种,哈哈。谢谢你提到的ASyncTask,还没接触过,正在网上了解。
      

  4.   

    希望这个例子对你有帮助
    http://blog.csdn.net/mylzc/article/details/6736988
      

  5.   

    网上查询了下资料,了解了下android UI 更新的问题。
    主要是android的UI单线程的原因,导致UI更新操作只能在UI主线程完成。所以子线程只有通过和UI主线程的通信来完成UI更新。
    有四种类型:
    1.Activity.runOnUIThread(Runnable)2.View.post(Runnable),View.postDelay(Runnable,long)3、Handler4、AsyncTask关于之前说的invalidate 是画面更新机制的一部分,当UI主线程接受到invalidate的消息后就会自动重绘画面,postinvalidate可以从子线程传递这个消息。所以invalidate只是出发UI主线程重绘画面。子线程和主线程之间的数据交互则要通过以上四种方法实现, 最终是通过handler实现的,具体的实现原理我没有了解。  这个是我的理解了,谢谢了。有理解错的地方还请给我指正了啊, 哈哈。