简述AsyncTask中各个方法哪些在主线程执行哪些在子线程执行 ?
参考答案:
AsyncTask是一个轻量级的异步任务类,它可以在线程池中执行后台任务,并把执行的进度和最终的结果传递给主线程,用于在主线程中更新UI。AsyncTask中各个方法在主线程或子线程中的执行情况如下:
在主线程中执行的方法:
- onPreExecute():此方法在异步任务执行之前被调用,通常用于执行一些界面上的初始化操作,例如显示一个进度条对话框等。
- onPostExecute(Result):当后台任务执行完毕后,此方法会被调用。它相当于handler处理UI的方式,可以在这里使用在doInBackground()得到的结果来操作UI。任务执行的结果会作为此方法的参数返回。
在子线程中执行的方法:
- doInBackground(Params...):此方法在线程池中执行,用于处理所有的耗时任务,例如文件下载等。所有的代码都会在这个子线程中运行,因此不能在这里直接操作UI。任务一旦完成,可以通过return语句来将任务的执行结果进行返回。
此外,在doInBackground()方法的执行过程中,还可以调用**publishProgress(Progress...)**方法来更新任务的进度。这个方法通常与onProgressUpdate(Progress...)方法配合使用,后者会在publishProgress()被调用后在主线程中执行,用于更新UI以反映任务的进度。
请注意,为了确保线程安全并避免UI更新相关的问题,应该始终在正确的线程中执行相应的操作。在子线程中执行耗时操作,然后在主线程中更新UI是一个常见的模式,而AsyncTask正是为此目的而设计的。