关于Android AsyncTask的疑问:onProgressUpdate是否回调doInBackground?
关于AsyncTask中onProgressUpdate()与doInBackground()的关系解答
嘿,作为摸爬滚打多年的Android开发者,我来给你把这个事儿说透~
首先可以明确地告诉你:onProgressUpdate()绝对不会回调doInBackground(),这俩的调用关系是单向的,而且完全反过来。
我给你理清楚AsyncTask的核心执行逻辑:
- 首先在主线程执行
onPreExecute(),做一些任务开始前的准备工作(比如显示加载弹窗); - 接着系统会把任务切换到子线程,执行
doInBackground(Params...)——这才是真正处理耗时操作的地方,比如网络请求、文件下载; - 如果你在
doInBackground()里需要更新进度(比如下载进度条),你要主动调用publishProgress(Progress...)方法,这时候系统会把进度数据传递回主线程,触发onProgressUpdate(Progress...)执行,用来更新UI; - 当
doInBackground()执行完毕,它的返回结果会传到主线程的onPostExecute(Result)里,做任务收尾(比如关闭弹窗、展示结果)。
简单来说:是doInBackground()通过publishProgress()触发onProgressUpdate(),而不是反过来。如果那张图片让你觉得onProgressUpdate()会回调doInBackground(),大概率是图片的流程标注有歧义或者你理解错了~
内容的提问来源于stack exchange,提问作者Thomas Daniel
相关产品推荐
相关产品推荐

