标签:
http://www.cnblogs.com/plokmju/p/android_Handler.html
android不允许在主线程里做耗时操作,如网络操作,以此来避免ANR
ANR(Application Not Responding)
http://baike.baidu.com/link?url=rLzKRNkjt79XITQKhRXp32alhsuKEt2FoHPw3vuB2UlEvyKOZwnEh4OYoPy4_fwO6zPPECXWre4ycip4mB0LOq
Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。
默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。
因此如果想进行上述的操作,应该开启一个子线程。而在子线程中,android不允许进行UI操作。如果想在子线程中进行UI操作,就可以使用Handler开启UI线程。
Handler,它直接继承自Object,一个Handler允许发送和处理Message或者Runnable对象,并且会关联到主线程的MessageQueue中。每个Handler具有一个单独的线程,并且关联到一个消息队列的线程,就是说一个Handler有一个固有的消息队列。当实例化一个Handler的时候,它就承载在一个线程和消息队列的线程,这个Handler可以把Message或Runnable压入到消息队列,并且从消息队列中取出Message或Runnable,进而操作它们。
由上可知,Handler有两种用法:
具体用法可以看第一个链接的文章
http://blog.csdn.net/gh102/article/details/7191486
这边对post的使用更加清晰一点
Post和message区别:
http://blog.csdn.net/u013168615/article/details/47024073
从源码中可以看出,post是调用了sendMessageDelayed方法:
public final boolean post(Runnable r) { return sendMessageDelayed(getPostMessage(r), 0); }
而其中的getPostMessage则是把Runnable r 包装成一个空Message然后返回
private static Message getPostMessage(Runnable r) { Message m = Message.obtain(); m.callback = r; return m; }
所以post和message没有本质区别,只是用法不同而已
handler.post和handler.sendMessage本质上是没有区别的,都是发送一个消息到消息队列中,而且消息队列和handler都是依赖于同一个线程的。
标签:
原文地址:http://www.cnblogs.com/qlky/p/5657924.html