android的Thread、Runnable、Asyntask的区别与联系
Android中的UI主线程不是线程安全的。开发人员必须注意以下两点:
1.更新UI界面的操作必须在UI主线程中进行
2.耗时操作不能在UI主线程中进行,否则会出现ANR错误
那么如果我要完成一个耗时操作,结束后更新UI界面来显示耗时操作的结果,应该怎么办呢? 有两种方法:使用Thread+Handler;使用AsynTask。具体方法网上很多文章,这里不再赘述。
无论Thread、Runnable还是Asyntask,其实都是多线程操作。那么三者有什么区别呢?
1.Thread:
类。可以继承该类来定义你自己的线程类,重写run()方法实现你想要线程中完成的操作。
2.Runnable:
接口。重写run()方法实现你想要在线程中完成的操作。
3.AsynTask:
抽象类。实现doInBackground()方法实现你想要在线程中完成的操作。
比较:
1.Thread和Runnable:可参考http://wenku.baidu.com/view/c242df69011ca300a6c39077.html
(1) 说白了就是类和接口的区别。Thread是一个类,java中是不允许继承多个父类的,这就是Thread的一个局限性。而是用Runnable就不同了,可以implements多个接口,同时继承一个父类,这样会更加灵活。
(2)当多个线程需要共享资源时,是用Thread很难达到目的,但是用Runnable接口就容易许多了。
(3)二者的联系:看源码可以发现,Thread其实就是继承了Runnable接口的子类。
2.Thread和AysnTask:可参考http://blog.csdn.net/super005/article/details/5827298
(1)Thread的开销大,匿名线程不好管理。而AysnTask使用了高效的框架来管理。
(2)Thread中更新UI需要使用Handler来进行线程间通讯,非常麻烦。而AsynTask避免了这个麻烦,它在后台线程中运行,但回调函数是在主线程中执行的,因此可以直接将耗时操作放在线程后台中做,将更新UI的操作放在回调函数中。
更多相关文章
- Study on Android【六】--消息机制,异步和多线程
- [置顶] 我的Android进阶之旅------>Android基于HTTP协议的多线程
- 实现Android监控任意控件或按键双击事件方法
- Android中后台定时任务实现,即时数据同步问题思考!
- android面试经典(6)
- 转:关于android多任务同时下载的一点心得
- Android研究院之应用开发线程池的经典使用
- 浅谈Android应用的退出
- iOS和Android规范解析——提示框(Toast)对比