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 不是线程,是吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在AsyncTask doInBackground()中使用同步对象?