android的Thread、Runnable、Asyntask的区别与联系

本文探讨了Android中UI主线程的安全性问题,并提出了两种解决耗时操作的方法:使用Thread+Handler和AsyncTask。此外,还对比了Thread、Runnable及AsyncTask的特点与适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/super005/article/details/5827298

(1)Thread的开销大,匿名线程不好管理。而AysnTask使用了高效的框架来管理。

(2)Thread中更新UI需要使用Handler来进行线程间通讯,非常麻烦。而AsynTask避免了这个麻烦,它在后台线程中运行,但回调函数是在主线程中执行的,因此可以直接将耗时操作放在线程后台中做,将更新UI的操作放在回调函数中。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值