1

나는 일정한 간격으로 데이터 스트림을 가져 오는 BroadcastReceiver을 사용하고 있으며 해당 데이터를 기반으로 특정 데이터베이스 작업을 수행하여 해당 데이터를 여러 테이블에 삽입합니다.BroadcastReceiver에서 데이터를받은 후 데이터베이스 작업하기

BroadcastReceiver 안에 데이터베이스 작업을 할 수 있지만 수신자는 언제든지 반환 할 수 있지만 문제가 있습니다. Morel, 나는 AsyncTask에서 그러한 데이터베이스 작업을하고 싶습니다.

그러나 (AFAIK) 아직도 onReceive() 반환 및 실행중인 다른 활성 구성 요소가없는 경우 안드로이드는 프로세스를 죽일 수 있다는 같은 이유로 BroadcastReceiver에서 AsyncTask를 시작하는 좋은 방법이 아닙니다, 그래서 나는 Service 왼쪽하고 있기 때문에 데이터베이스 관련 작업을 수행합니다. 이 서비스는 AsyncTask을 관리해야합니다. 이렇게하면 Android가 활성 구성 요소를 인식하고 Android가 프로세스를 중지하지 않습니다.

  • 주어진 시나리오에서 이렇게하는 것이 가장 좋은 방법입니까? - 이것도

브로드 캐스트 리시버==>서비스==>AsyncTask를==>SQLite는 (INSERT)

안 그렇다면 Service 대신 IntentService은 어떨까요?

  • BroadcastReceiver 자체에서 데이터베이스 작업을 수행하면 어떻게됩니까?

나는 SQLiteOpenHelper 클래스의 싱글 어댑터를 가지고, 그래서 내가 데이터베이스 작업을위한 어댑터를 사용 BroadcastReceiveronReceive()에서받을 context 사용할 수 있습니다. 그러나 접근법은 비효율적 인 것처럼 보입니다.

제안하십시오 ..

답변

1

이 주어진 시나리오에 그렇게 할 수있는 가장 좋은 방법입니다 :에서보세요 ?

가 나는 IntentService보다는 AsyncTaskService 사용할 수 있습니다. AsyncTask은 주 응용 프로그램 스레드에서 수행해야하는 작업이 있고 서비스가 주 응용 프로그램 스레드에서 수행되어야하는 작업을 가지고 있으면 안되는 경우에만 사용됩니다.

그러나 그 이상의 경우에는 BroadcastReceiverService에 위임 한 대표적인 방법입니다.

BroadcastReceiver 자체에서 데이터베이스 작업을 수행하면 어떻게됩니까?

UI가 전경에있는 경우 onReceive()이 실행되는 동안 UI가 정지됩니다.

작업을 수행하는 데 몇 초가 걸리면 ANR과 동일한 백그라운드 작업이 수행되고 작업이 완료되지 않고 중단됩니다.

따라서 IntentService을 사용하는 것이 좋습니다.

+0

'IntentService' 자체가'AsyncTask'라는 것을 알고 있기 때문에 IntentService의 onHandleIntent()에서 데이터베이스 작업을 수행 할 수 있습니까? –

+0

@VedPrakash : "IntentService 자체가 AsyncTask라는 것을 알고 있습니다."- 아니, 그렇지 않습니다. "IntentService의 onHandleIntent()에서 데이터베이스 작업을 수행 할 수 있습니까?" -- 예. – CommonsWare

+0

그래서'onHandleIntent()'에서 일어날 데이터베이스 연산은'AsyncTask' 연산이 아니라는 것을 의미합니까? –

관련 문제