我正在开发一个多线程应用程序,它使用线程和异步任务在多个线程上执行代码。
我有一个 AsyncTask,它向数据库添加一行,然后发送 API 请求。收到 API 请求回复后,它会更新数据库中的行。数据库适配器对象从 UI 线程传递到 AsyncTask。
不幸的是,AsyncTask 不适用于多核设备(例如 Asus Transformer)。第一次尝试将该行添加到数据库时出现空指针异常。
我不知道为什么会发生这种情况,但这可能与docs中的内容有关。在“内存可观察性”下。
最佳答案
谢谢大家的评论。
事实证明我确实有竞争条件。我没有意识到onActivityResult是在onResume之前调用的,所以事实证明,在较慢的手机上,可运行任务将在调用onResume之后执行(因此数据库已打开),但在较快的手机上,可运行任务将被执行将首先进行数据库操作并遇到 NPE。
谢谢!
关于java - 多核处理器上的 Android 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8746735/