当我重新安装应用程序时,我的AyncTasks似乎都没有工作.不管是什么,它们都会失败,并显示消息“将消息发送到死线程”.
他们从事各种活动,从事各种不同的工作,但都失败了.
如果我在DDMS的线程查看器中查看线程,则所有5个左右的AsynchTask线程似乎都处于空闲状态并正在等待工作.
如果我强行关闭该应用程序,然后重新启动它,它们都将开始工作.
它们都是从UI线程开始的.
有任何想法吗?
解决方法:
这是由于Android框架中AsyncTask中的错误所致. AsyncTask.java具有以下代码:
private static final InternalHandler sHandler = new InternalHandler();
它期望在主线程上进行初始化,但这不能保证,因为它将在导致类运行其静态初始化程序的任何线程上进行初始化.在您的情况下,您可能导致它在您创建的工作线程上初始化.
一个简单的解决方法是将以下代码添加到应用程序的onCreate方法中:
Class.forName("android.os.AsyncTask");
这将强制AsyncTask在主线程中初始化.我在android bug数据库中对此提交了一个bug.参见http://code.google.com/p/android/issues/detail?id=20915.