gpt4 book ai didi

android - 如何在 SyncAdapter onPerformSync 期间正确使用 AsyncTask

转载 作者:太空狗 更新时间:2023-10-29 16:23:21 27 4
gpt4 key购买 nike

我收到了大量来自用户的错误报告,这些错误报告来自强制关闭对话框,内容如下:

java.lang.ExceptionInInitializerError
at com.MyRequest.execute(MyRequest.java:59)
at org.nsdev.MySyncAdapter.onPerformSync(MySyncAdapter.java:90)
at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:164)
Caused by: java.lang.RuntimeException:
Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask.<clinit>(AsyncTask.java:152)

现在,我一直在努力弄清楚我应该如何最好地解决这个问题。在我的 onPerformSync 实现中,我创建了许多 AsyncTasks 并执行它们。我怀疑我的问题是在从 onPerformSync 返回之前我没有等待这些任务完成。我尝试执行以下操作:

Looper.prepare();

// Execute async tasks

Looper.loop();

然后我设置了一个计数器,当该计数器递减为零时,在异步任务的回调中调用 Looper.myLooper().quit()。

但这样做会导致我的应用程序因以下运行时错误而更加崩溃:

java.lang.RuntimeException: Main thread not allowed to quit
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:175)
at android.os.Looper.quit(Looper.java:173)
at org.nsdev.MySyncAdapter$1.requestFinished(MySyncAdapter.java:89)
at com.MyAsyncTask.onPostExecute(MyAsyncTask.java:84)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

知道如何正确完成我的同步吗?

最佳答案

我知道这篇文章已经过时了,但是对于遇到这个线程的其他人来说,不在主线程上调用 looper.quit() 怎么样?下面的工作对我来说来自一个 SyncAdpater 服务产生了几个 AsyncTasks,尽管在性能方面可能有其他原因不这样做......

Handler h = new Handler(Looper.getMainLooper());
h.post(new Runnable() {
public void run() {

// AsyncTask... execute();
}
});

关于android - 如何在 SyncAdapter onPerformSync 期间正确使用 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8890841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com