小谈 Handler

来源:互联网 发布:暗黑破坏神3 知乎 编辑:程序博客网 时间:2024/05/29 14:59
在android中,非UI线程不能直接操作UI线程的UI组件。如果想要在非UI线程中对UI组件进行操作,可以通过Handler来进行。在使用Handler之前,必须保证线程中已经实例化了一个Looper对象,且一个线程只能有一个Looper对象。Handler可以看做是Looper的接口,Looper负责接收消息和处理消息。实例化一个Looper可以调用Looper.prepare()方法来进行实例化。而Looper.loop()则是启动Looper对象进行消息的接收处理,该方法是一个无限循环的方法,一旦调用,后面的代码将不被执行,除非停止掉该方法。主线程中在初始化时已经初始化了一个Handler和Looper对象。而在非主线程中,若要用Handler,则必须自己新建一个Handler对象,并且在新建对象之前,在线程中实例化一个Looper对象,通过调用Looper.prepare()方法。

Toast和Dialog都有一个Handler的实例变量,所以在使用Toast和Dialog时,如果不是在主线程中,则在使用之前必须先实例化一个Looper,即调用Looper.prepare()。最后调用Looper.loop()启动Loop对象即可。
0 0
原创粉丝点击