Asynctask 中的同步方法。 Asynctask 不是线程,是吗?

Posted

技术标签:

【中文标题】Asynctask 中的同步方法。 Asynctask 不是线程,是吗?【英文标题】:Synchronized method in Asystask. Asyntask is not thread, is it? 【发布时间】:2014-08-29 23:58:18 【问题描述】:

当我单击一个按钮时,调用 asynctask。在 Asysnctask 的 Doinbackgournd 中,我调用了 Synchronized 方法。如果我多次单击按钮,当第一次完成 Synchronized 方法时,第二个 AsynsT 也会启动。

【问题讨论】:

doInBackground 被异步调用意味着创建了新线程,因此第二个异步可能同时开始 但 doInBackground 调用同步方法。那么doInBackground1 完成然后doInBackground2 开始?对吗? 是的 doinback... 将调用同步方法,但确保你的同步方法中的第二个线程将在第一个线程之后调用,而不是你可以从你的后执行开始第二个线程异步任务 【参考方案1】:

单击按钮时总是会创建新线程,但只有一个线程会执行同步方法,其余线程将一直等待。

【讨论】:

谢谢。但我使用 AsyncT 而不是 Thread。是否与 AsyncTask 同步。 AsyncTask 也是在后台运行的线程。但它是专门为与 GUI 一起工作而设计的 onPreExecute - 在后台运行提供对 GUI 的访问 doInBackground - 在后台运行不提供对 GUI 的访问 onProgressUpdate - 从 do 在后台调用 publishProgress() 以从 doInBackground 访问 GUI PostExecute- 在后台运行后doInBackground【参考方案2】:

是的,doinback ...将调用同步方法,但更令人不安的是,您的同步方法中的第二个线程将在第一个线程之后调用,而不是您可以从您的异步任务中的后执行启动第二个线程 更多详情请参考Api

您还可以使用 getStatus() 方法告诉您 aync 任务正在运行、已完成等。

【讨论】:

以上是关于Asynctask 中的同步方法。 Asynctask 不是线程,是吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android攻城狮AsyncTask

用于图像获取的AsyncTask不断被调用

如何在AsyncTask doInBackground()中使用同步对象?

AsyncTask ProgressBar 更新中的多线程概念 wait() 和 notify()

android asynctask 多个实例是一个线程池吗

Android AsyncTask内部线程池异步执行任务机制简要分析