【问题标题】:Android calling a method from a different class from within an AsyncTaskAndroid 从 AsyncTask 中的不同类调用方法
【发布时间】:2015-09-17 15:19:19
【问题描述】:
在 Asynctask 中我调用一个方法,我的意思是在 doInBackgroud() { ...code goes here ... } 中,我调用的方法是 ..
A) .. 在异步任务类中
B) .. 在不同的类别中
这个方法调用是否还在异步任务的线程中执行?
我想知道,因为人们常说“只有doInBackgroud() { ...code goes here ... } 中的代码在不同的线程中执行。
【问题讨论】:
标签:
java
android
multithreading
android-asynctask
【解决方案1】:
从doInBackground() 内部进行的调用(直接或间接)会自动在后台线程中运行。
有一些方法可以强制某些代码在主 UI 线程中运行(例如,请参阅 this question),但必须明确执行。
【解决方案2】:
是的,方法调用是在异步任务的线程中执行的。如果无法调用其他类的方法,异步任务将毫无用处。
此外,如果 doInBackground 方法(经常用于发出 Web 请求)将在主线程中运行,Android 将抛出异常 (NetworkOnMainThreadException)。
【解决方案3】:
我想知道,因为人们常说“只有 doInBackgroud() { ...code goes here ... } 中的代码在不同的线程中执行。
当您的应用程序启动时,会创建一个称为 UI 线程(也称为“主”线程)的线程。该线程将所有事件分派到应用程序上的小部件和其他内容。
AsyncTask 将在 UI 线程上执行 onPreExecute 和 onPostExecute。另一方面,doInBackground() 在后台线程上调用,完成后将返回主线程。