异步处理:AsyncTask OR Handler

本文对比了Android开发中AsyncTask与Handler两种异步处理方式。AsyncTask因其简单易用受到青睐,适合处理单个或多任务场景;而Handler则在多任务处理时提供更清晰的代码结构。

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

一、AsyncTask:Android提供的轻量级异步类

1)优点:简单、便捷;
2)缺点:多个异步类同时操作并更新UI时显得复杂,需要不停地switch

二、Handler:异步实现时,涉及到 Handler, Looper, Message,Thread四个对象

1)优点:功能定义明确,对于多个后台任务,代码清晰
2)缺点:对于单个异步处理操作,代码过多,结果过于复杂

我的看法:

我更喜欢使用AsyncTask;无论是单个异步操作还是多个异步操作时,因为单个异步操作时,代码简洁,只需要在不同的方法中添加语句就可以了,而在多个异步操作时,虽然要使用switch()语句进行筛选,是复杂了些,但只要我们对它的各个方法及其联系有准确的了解,我认为条理是清晰的,而且节省了很多的代码。
01-01 08:11:27.038 E/StrictMode( 2641): Tried to access the API:ViewConfiguration which needs to have proper configuration from a non-UI Context:com.android.camera.app.CameraApp@32d9eff The API:ViewConfiguration needs a proper configuration. Use UI contexts such as an activity or a context created via createWindowContext(Display, int, Bundle) or createConfigurationContext(Configuration) with a proper configuration. 01-01 08:11:27.038 E/StrictMode( 2641): java.lang.IllegalAccessException: Tried to access the API:ViewConfiguration which needs to have proper configuration from a non-UI Context:com.android.camera.app.CameraApp@32d9eff 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.StrictMode.assertConfigurationContext(StrictMode.java:2296) 01-01 08:11:27.038 E/StrictMode( 2641): at android.view.ViewConfiguration.get(ViewConfiguration.java:521) 01-01 08:11:27.038 E/StrictMode( 2641): at android.view.View.<init>(View.java:5321) 01-01 08:11:27.038 E/StrictMode( 2641): at android.widget.ImageView.<init>(ImageView.java:181) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.PhotoItem.getView(PhotoItem.java:127) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter.getView(CameraFilmstripDataAdapter.java:151) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView.buildViewItemAt(FilmstripView.java:850) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView.reload(FilmstripView.java:1827) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView.access$1300(FilmstripView.java:58) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView$3.onFilmstripItemLoaded(FilmstripView.java:1567) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter.replaceItemList(CameraFilmstripDataAdapter.java:276) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter.access$700(CameraFilmstripDataAdapter.java:39) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter$QueryTask.onPostExecute(CameraFilmstripDataAdapter.java:447) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter$QueryTask.onPostExecute(CameraFilmstripDataAdapter.java:379) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.AsyncTask.finish(AsyncTask.java:771) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.AsyncTask.access$900(AsyncTask.java:199) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.Handler.dispatchMessage(Handler.java:106) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.Looper.loopOnce(Looper.java:201) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.Looper.loop(Looper.java:288) 01-01 08:11:27.038 E/StrictMode( 2641): at android.app.ActivityThread.main(ActivityThread.java:7870) 01-01 08:11:27.038 E/StrictMode( 2641): at java.lang.reflect.Method.invoke(Native Method) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

intoSunshine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值