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的操作放在回调函数中。

更多相关文章

  1. Study on Android【六】--消息机制,异步和多线程
  2. [置顶] 我的Android进阶之旅------>Android基于HTTP协议的多线程
  3. 实现Android监控任意控件或按键双击事件方法
  4. Android中后台定时任务实现,即时数据同步问题思考!
  5. android面试经典(6)
  6. 转:关于android多任务同时下载的一点心得
  7. Android研究院之应用开发线程池的经典使用
  8. 浅谈Android应用的退出
  9. iOS和Android规范解析——提示框(Toast)对比

随机推荐

  1. MediaScanner源码分析
  2. Android(安卓)touch screen keyboard 移
  3. Android客户端与服务器交互方式(1)
  4. vue结合android,mint中popup和picker实现
  5. Android版本更新(断点下载)
  6. 探究J2ME和Android的几大区别
  7. android微信朋友圈分享
  8. android进程重启及activity恢复
  9. Android Edittext设置android:imeOptions
  10. 性能优化——Android图片压缩与优化的几