【发布时间】:2013-10-22 14:27:59
【问题描述】:
我正在尝试从另一个 AsyncTask 的 doInBackground()-method 启动一个 AsyncTask...
这甚至可能吗?如果是,我该如何实现?
稍后编辑:
我的想法是我启动一个异步任务,它将从 Tweeter 获取我的状态......直到这里一切都好......但是当我遇到一些特定的推文时,我需要使用来自我的服务器的一些信息来修改它们,在这里我会进行另一个网络操作,因为我需要等到我从服务器获取信息,所以我这样做:
GetContent getContentServiceAsyncTask = new GetContent(context);
try {
tweetText = Uri.decode(getContentServiceAsyncTask.execute(
URL_GET_CONTENT, jsonRequest).get());
} catch (InterruptedException e) {
Log.e(TAG_DEBUG, "InterruptedException: ", e);
} catch (ExecutionException e) {
Log.e(TAG_DEBUG, "ExecutionException: ", e);
}
这是从doInBackground()方法中已经启动的AsyncTask开始的...
我知道我可以在 AsyncTask 中添加方法并在 doInBackground() 方法中调用它们,但我需要在其他地方使用它们,我从 onPostExecute 启动这些 AsyncTasks ...
如果你们认为有一个简单的解决方法,这不会影响我的表现,那就太好了......如果不是,我将创建一些静态方法,我将在我需要的所有 AsyncTasks 中调用(但这需要我修改很多代码)
【问题讨论】:
-
您为什么要这样做? developer.android.com/reference/android/os/AsyncTask.html。检查主题线程规则
-
这是可能的,但如果您尝试从第二个任务的 onPostExecute 修改 UI,它会崩溃,因为它不在主线程中执行。
-
如果你的第二个任务不包含UI操作,你可以开始。
-
建议在第一个异步执行后启动异步。
-
嗨,Negru,您的第一个异步任务必须在并行任务架构上运行。因此,您使用 executor ==> "new FirstTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
);" 开始您的第一个任务第二个任务在您的第一个任务的 doInbackgreound() 中运行。我将创建示例应用程序并编写答案。