2012-01-05 4 views
0

여러 스레드에서 코드를 실행하기 위해 스레드와 비동기 작업을 모두 사용하는 다중 스레드 응용 프로그램을 개발 중입니다.멀티 코어 프로세서에서 Android 오류가 발생했습니다.

데이터베이스에 행을 추가하고 API 요청을 보내는 AsyncTask가 있습니다. API 요청 응답을 받으면 데이터베이스의 행을 업데이트합니다. 데이터베이스 어댑터 객체는 UI 스레드에서 AsyncTask로 전달됩니다.

아쉽게도 AsyncTask는 멀티 코어 장치 (예 : Asus Transformer)에서 작동하지 않습니다. Null 포인터 예외는 데이터베이스에 처음으로 행을 추가하려고 할 때 발생합니다.

나는 왜 이런 일이 발생하는지 모르지만, 'Memory Observability'의 docs에있는 것과 관련이있을 수 있습니다.

+2

오류가 나타나는 위치에 코드를 게시하십시오. 그렇지 않으면 어떤 일이 발생했는지 알 수 없습니다. – Tudor

+7

이상한 일을하지 않는 한 멀티 코어 장치에는 차이가 없어야합니다. VM이 코어를 다루는 동안 스레드를 다루는 것뿐입니다. 당신의 테스트 폰은 단지 빠르며 느린 전화기에서는 만나지 못하는 경쟁 조건에 부딪 힐 수 있습니다. –

+0

문제를 좁히는 데 도움이된다면 멀티 코어 전화를 사용하고 AsyncTask를 사용하여 내 응용 프로그램에서 여러 개의 동시 스레드를 실행할 수 있지만 문제는 없습니다. – Pedantic

답변

1

의견을 남겨 주셔서 감사합니다.

나는 경쟁 조건이 있음을 알게되었습니다. OnResume 전에 onActivityResult가 호출되었다는 사실을 알지 못 했으므로 느린 전화기에서는 onResume이 호출 된 후 실행 가능한 작업이 실행되므로 (데이터베이스가 열렸으므로) 더 빠른 전화에서는 실행 가능한 작업 먼저 데이터베이스 작업을 수행하고 NPE를 만나게됩니다.

감사합니다.

관련 문제