我正在开发一个多线程应用程序,它使用线程和异步任务在多个线程上执行代码。
我有一个AsyncTask,它向数据库添加一行,然后发送一个API请求。收到API请求回复后,它会更新数据库中的行。数据库适配器对象从UI线程传递给AsyncTask。
不幸的是,AsyncTask不适用于多核设备(例如Asus Transformer)。当我第一次尝试将行添加到数据库时,会发生空指针异常。
我不知道为什么会发生这种情况,但这可能与“内存可观察性”下docs中的内容有关。
答案 0 :(得分:1)
感谢你们的评论。
事实证明我确实遇到了竞争条件。我没有意识到在onResume之前调用了onActivityResult,结果发现在较慢的手机上,可以在调用onResume之后执行可运行的任务(因此数据库已被打开),但在更快的手机上,可运行的任务将首先进入数据库操作并遇到NPE。
谢谢!