2012-01-05 55 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會面。

謝謝!