2012-01-05 11 views
0

私は、複数のスレッドでコードを実行するためにスレッドと非同期タスクの両方を使用するマルチスレッドアプリケーションを開発しています。マルチコアプロセッサでのAndroidエラー

データベースに行を追加してからAPIリクエストを送信するAsyncTaskがあります。 API要求の応答が受け取られると、データベースの行が更新されます。データベースアダプタオブジェクトは、UIスレッドからAsyncTaskに渡されます。

残念ながら、AsyncTaskはマルチコアデバイス(Asus Transformerなど)では機能しません。最初にデータベースに行を追加しようとすると、NULLポインタ例外が発生します。

なぜこのようなことが起こるのかわかりませんが、「メモリの観察可能性」のdocsに記載されている内容と関係があります。

+2

エラーが表示される場所にコードを投稿してください。そうでないと、何が起こっているのかわからないことがあります。 – Tudor

+7

あなたが何か変わったことをしない限り、マルチコアデバイスに違いはありません。あなたはスレッドを扱っているだけで、VMはコアを扱います。あなたのテスト用の携帯電話は単なる速いですし、低速の携帯電話では会わない競合状態になる可能性が高いです。 –

+0

問題を絞り込むのに役立つなら、私はマルチコアの電話を持っていて、AsyncTaskを使ってアプリケーションで複数のスレッドを同時に実行できますが、問題はありません。 – Pedantic

答えて

1

コメントありがとうございます。

私は競合状態になったことが判明しました。 onResumeの前にonActivityResultが呼び出されたことに気づいていなかったので、遅い電話ではonResumeが呼び出された後(つまりデータベースがオープンされた後)実行可能なタスクが実行されますが、最初にデータベース操作に行き、NPEで満たされます。

ありがとうございます!

関連する問題