在Asynctask中我调用一个方法,我的意思是在doInBackgroud() { ...code goes here ... }
内,我称之为一个方法..
A)..在异步任务类
中B)..在另一个班级
这个方法调用是否仍然在asynctask的线程中执行?
我很想知道,因为经常会说"只有doInBackgroud() { ...code goes here ... }
内的代码才会在另一个帖子中执行。
答案 0 :(得分:1)
是的,方法调用在asynctask的线程中执行。如果无法在其他类上调用方法,则asynctask将毫无用处。 此外,如果doInBackground方法(经常用于发出Web请求)将在主线程中运行,则Android将抛出异常(NetworkOnMainThreadException)。
答案 1 :(得分:1)
我很想知道,因为人们经常说“只有doInBackgroud()代码里面的代码......代码才会在这里...}在不同的线程中执行。
启动应用程序时,会创建一个称为UI线程的线程(也称为“主”线程)。该线程将所有事件分派给小部件以及应用程序上的诸如此类内容。
AsyncTask将在UI线程上执行onPreExecute
和onPostExecute
。另一方面的doInBackground()
在后台线程上调用,一旦完成就会返回主线程。
答案 2 :(得分:1)
doInBackground()
内的(直接或间接)调用会自动在后台线程中运行。
有一些方法可以强制某些代码在主UI线程中运行(例如,请参阅this question),但这必须明确完成。