2012-06-25 3 views
1

서비스에있는 스레드 풀의 스레드가 상당히 많습니다. 결국 그것은 일부 데이터를 제공자에 삽입하고 브로드 캐스트를 보내 GUI에 새 데이터를 알립니다.ThreadPool 스레드에서 SendBroadcast 호출을 차단합니다.

종종 1-3 개의 브로드 캐스트가 송수신되고 더 이상 브로드 캐스트가 수신되지 않습니다. 스레드 스택 트레이스를 보면 sendBroadcast의 시스템 메소드에 모두 들어 있습니다. 결코 반환하지 스레드에서

스택 트레이스 :

BinderProxy.transact (INT, 소포, 소포, int)를 라인 : 사용할 수 없습니다 [네이티브 메소드]
ActivityManagerProxy.getProviderMimeType (열린 우리당) 라인 : 3296
ContextImpl $ ApplicationContentResolver (컨텐트 리졸버) .getType (URI) 선 231
Intent.resolveType (컨텐트 리졸버) 라인 : 3754
Intent.resolveTypeIfNeeded (컨텐트 리졸버) 라인 : 3776
ContextImpl.sendBroadcast (텐트) 라인 : 969
응용 프로그램 (ContextWrapper) .sendBroadcast (의도) 라인 : (301)

reciver입니다 등록 :

<receiver android:name=".gui.MeasurementReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <data android:scheme="content" android:host="compy.product.providers.measurement"/> 
    </intent-filter> 
</receiver> 

방송 전송 :

context.sendBroadcast(new Intent(android.content.Intent.ACTION_VIEW). 
         setData(Uri.withAppendedPath(compy.content.Intent.URI_channel, ""+id))); 

을 이제 진짜 재미 부분에 대한 위의 내용은 ICS가 탑재 된 Galaxy Nexus 및 Galaxy Note ICS에서 문제없이 작동합니다. 그러나 은하주의, 갤럭시 SII 및 은하 SIII ICS에 설명 된 방법으로 실패합니다.

아마도 Galaxy Nexus와 관련하여 공급자가 한 번 또는 두 번 시작됩니다. 문제가있는 전화에서 모든 쿼리를 시작할 수 있습니다. 우리는이 행동에 대한 어떤 이유도 발견하지 못했습니다.

아이디어가 있으십니까?

답변

1

좋아이 정말 단순하게 밝혀 .... 우리는 두 번 Mainfest 파일의 컨텐트 프로를 등록했다

...

그래서 당신이있는 경우에 미친 오류가 매니페스트를 확인합니다. 나는 왜 그것이 방송을 어겼는지 전혀 모른다.

좀 더 정보 (편집) :

A는이 문제에 대한 꼬리를 말은 "로드 제공자 '클래스 이름' '당신이 공급자에 작업을 수행하려고 시대의 가장 로그 캣입니다. 그렇지 않으면 아주 희귀 한 메시지 인 것 같습니다. 우리는 그물에 그것에 대한 몇 가지 참조를 발견.

결국 관련 메모가 가장 중요했습니다 ....