2013-06-14 5 views
0

내 앱의 주요 활동에서 브로드 캐스트 리시버 클래스를 시작하고 싶습니다. 주요 활동에는 모든 GUI 작업이 있으며,이 작업은 모든 작업을 수행하는 서비스를 시작합니다. 재부팅 후이 서비스를 시작하기 위해 브로드 캐스트 수신기 클래스를 작성했습니다. 이제는 브로드 캐스트 리시버 클래스를 어디에 호출해야하는지 혼란 스럽습니다.메인 액티비티에서 BroadCast 리시버 호출하기

  • 내 주요 활동 (기본 활동을 방송 수신자로 만들고 싶지 않음)에서 어떻게 호출 할 수 있습니까?
  • 주 활동에서 브로드 캐스트 수신기를 호출하면 활동이 시작될 때마다 브로드 캐스트 클래스의 새 인스턴스가 만들어 집니 까? 그렇다면 메모리 누수가 발생합니까 아니면 이전 브로드 캐스트 리시버 인스턴스가 자동으로 삭제됩니까? 당신이 BroadcastReceiver에 자신의 의도 필터를 적용하여 등록 후 바로 수신기를 등록 후 활동 sendBroadcast()를 호출 할 수있는 솔루션으로

감사

+0

사용자가 응용 프로그램을 시작할 때도 호출해야합니까? –

+0

예 offcourse .. – Naruto

답변

0

합니다. 이것은 당신이 onReceive() 방법의 안에서 당신의 수신기에 오는 의도를 비교한다고 가정한다.

활동에 대한 참조가 남아있는 경우 메모리에서 제거되지 않으므로 수신자의 여러 인스턴스가 만들어지기 때문에 메모리는 활동의 수명주기를 어떻게 관리 하느냐에 달려 있습니다.

그리고 당신은 또한 장치의 당신은 어떤 활동에서 메시지 (포함. 주요 활동) 또는 클래스를 방송 할 수

+0

수신자가 서비스를 시작하는 경우 수신자에게 전화를 걸 필요가 있습니까? –

0

부팅 후 수신기를 시작 android.intent.action.BOOT_COMPLETED 텐트 필터를 추가 할 수 있습니다. 나는이 작업을 수행하는 도우미 클래스를 사용하고 있습니다 :

public class BroadcastHelper { 

public static void sendBroadcast(Context context, String message, Serializable value) { 

    Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction(message); 
    broadcastIntent.putExtra(Constants.BROADCAST_MESSAGE, value); 
    context.sendBroadcast(broadcastIntent); 

} 

}

매니페스트 파일에 수신기를 등록하는 것을 잊지 마십시오.

이 방법을 사용하면 의도를 제외하고 모든 클래스의 새 인스턴스를 만들지 않아 가비지 수집됩니다.

관련 문제