2012-05-21 3 views
3

나는 긴 작업 (업로드 프로세스)을 시작하는 브로드 캐스트 수신기를 가지고 있습니다. Activity 클래스에서 시작된 서비스 코드에서이 수신기를 새 스레드에 등록해야합니다.서비스의 브로드 캐스트 수신기를 새 스레드에 등록하십시오.

내가이 게시물 Are Android's BroadcastReceivers started in a new thread?을 확인했지만 나는 (로 IntentFilter 필터, 문자열 broadcastPermission, 핸들러 스케줄러 브로드 캐스트 리시버 수신기) 위해 Context.registerReceiver 사용에 대한 좀 더 구체적인 예를 필요로

사실은 내가 새 스레드를 생성하는 방법을 알아야 서비스로부터 수신자를 등록하고이 스레드에 첨부된다.

대단히 감사합니다. RA

에서
+0

일부 코드 –

+0

가 http://stackoverflow.com/questions/5394950/are-android-broadcastreceiver-started-in-의 의견을 읽고 추가 정교한하시기 바랍니다 a-new-thread 포스트 당신은 대답을 얻을 수 없습니다 bez onRecive 메소드는 메인 스레드에서 호출됩니다 –

+0

안녕하세요 Aashish, 귀하의 발언을 주셔서 감사합니다. 나는 실제로 코드를 요구하고있다. 나는 정확하게 새로운 쓰레드에 브로드 캐스트 리시버를 등록하는 방법을 모른다. 가능한 경우 예가 필요합니다. 어떻게 그 일을 할 수 있는지 그물을 조사하고 있지만 그러한 예를 찾을 수는 없습니다. 내가 이해 한 것은 1) 새 스레드를 만들고 2)이 스레드에 대한 처리기를 작성한 다음 3) 처리기를 사용하여 새 스레드에서 수신기를 등록해야한다는 것입니다. 누군가 나에게 짧은 예제 나 설명을 해줄 수 있습니까? 감사합니다 – Rami

답변

12

서비스의 onCreate() : 가능하면

private Handler handler; // Handler for the separate Thread 

HandlerThread handlerThread = new HandlerThread("MyNewThread"); 
handlerThread.start(); 
// Now get the Looper from the HandlerThread so that we can create a Handler that is attached to 
// the HandlerThread 
// NOTE: This call will block until the HandlerThread gets control and initializes its Looper 
Looper looper = handlerThread.getLooper(); 
// Create a handler for the service 
handler = new Handler(looper); 
// Register the broadcast receiver to run on the separate Thread 
registerReceiver (myReceiver, intentFilter, broadcastPermission, handler); 
+0

안녕하세요, David, 정말 고마워요! 지금 일하고 있습니다 :) 정말 친절한 도움에 감사드립니다. – Rami

+0

참고 : Handler (looper, this)가 정의되지 않았으며 "this"인수를 삭제하거나 Callback으로 캐스팅해야한다는 오류가 나타납니다. 나는이 주장을 지웠고 효과가있다. 고맙습니다. RA – Rami

+0

아, 죄송합니다. 내 서비스 중 하나에서이 코드를 복사했고 그 서비스는 handleMessage() 콜백 자체를 구현했습니다. 그것이'this' 매개 변수가 있었던 이유입니다. 기꺼이 도움이 될 것입니다. –

관련 문제