2012-01-05 120 views
0

我正在开发一个多线程应用程序,它使用线程和异步任务来在多个线程上执行代码。多核处理器上的Android错误

我有一个AsyncTask向数据库添加一行,然后发送一个API请求。一旦收到API请求回复,它就会更新数据库中的行。数据库适配器对象从UI线程传递给AsyncTask。

不幸的是,AsyncTask在多核设备(例如Asus Transformer)上不起作用。当我尝试第一次将行添加到数据库时,发生空指针异常。

我不知道为什么会发生这种情况,但它可能与'内存可观察性'下docs中的内容有关。

+2

请在错误出现的地方张贴一些代码,否则我们无法知道发生了什么。 – Tudor 2012-01-05 17:21:16

+7

除非你在做一些奇怪的事情,否则在多核设备上应该没什么区别。你只是在处理线程,而虚拟机处理核心。更有可能你的测试手机速度很快,而且你遇到了在慢速手机上遇到的竞争状况。 – 2012-01-05 17:28:17

+0

如果它有助于缩小问题,我有一个多核手机,并使用AsyncTask在我的应用程序中运行多个并发线程,但没有问题。 – Pedantic 2012-01-05 17:29:03

回答

1

感谢您的评论家伙。

事实证明,我确实有一个竞争条件。我没有意识到在onResume之前调用了onActivityResult,所以事实证明,在速度较慢的手机上,可运行任务将在onResume被调用后执行(因此数据库已被打开),但在快速手机上,可运行任务将首先进入数据库操作并与NPE会面。

谢谢!