如何在SyncAdapter onPerformSync期间正确使用AsyncTask
-
29-10-2019 - |
题
我已经收到来自用户的大量错误报告,这些错误报告来自强制关闭对话框,内容如下: 通用标签
现在,我一直在尝试找出如何最好地解决此问题。在我的onPerformSync实现内部,我创建了许多AsyncTasks并执行它们。我怀疑我的问题是在从onPerformSync返回之前,我没有等待这些任务完成。我尝试执行以下操作: 通用标签
然后我设置了一个计数器,当该计数器递减为零时,从异步任务的回调内部调用Looper.myLooper()。quit()。
但是这样做会导致我的应用程序崩溃,并出现以下运行时错误: 通用标签
有什么想法可以正确完成我的同步吗?
解决方案
我知道这篇文章很旧,但是对于遇到此线程的其他人,只在主线程上不调用looper.quit()怎么办?以下内容是从SyncAdpater服务生成多个AsyncTask的情况下为我工作的,尽管在性能方面可能还有其他原因不这样做... 通用标签
其他提示
实际上你不能。AsyncTask使用主UI线程,并依赖于Handler和Looper那里不可用。使用纯线程实现,只应在活动中使用AsyncTask。
abloc的响应解决了该问题,但是此解决方案的问题是UI冻结,Android 2.2和Android 2.3中存在此问题。我发现的技巧是在我的类SyncAdapter
中调用AsyncTask的构造函数,并使用Looper.prepare()
:
通用标签
不隶属于 StackOverflow