0

내 응용 프로그램에서 응용 프로그램 클래스를 확장했습니다. 이 클래스에는 연결 변경을 기다리는 BroadcastReceiver가 있습니다. 전체 연결이 끊어지면 특정 활동이 표시됩니다. 그러나 앱이 포커스에 있지 않은 경우 (전경이 아닌 경우) 해당 액티비티를 표시하고 싶지 않습니다.안드로이드 - 응용 프로그램 연결 처리 중 변경 실행 중

그러나 Application 클래스에는 onPause 또는 onResume 메서드가 없습니다. 앱이 실행중인 경우에만이 활동을 어떻게 표시 할 수 있습니까? 모든 액티비티에는 BroadcastReceiver가 있어야합니까? (꽤 많습니다. 다른 Activity 클래스 (Activity, ListActivity, FragmentActivity 등)를 확장하므로 확장 된 Activity를 만들 수 없습니다. Is

답변

1

사용자 정의 응용 프로그램 클래스에 BroadcastReceivers를 등록하는 것이 안티 패턴이라고 말할 수 있습니다. 예를 들어, 앱의 활동 중 하나가 전경에있는 경우에만 작업을 수행 할 BroadcastReceiver를 가질 수 있습니다. 예를 들어, 언급 한대로 Application 클래스에는 Activity (적어도 대부분은)의 라이프 사이클 콜백이 없습니다.

귀하의 경우에는 연결을 처리하는 수신기를 등록하겠습니다. onResume() 콜백의 모든 액티비티에서 동적으로 생성하고 onPause() 콜백에서 등록을 등록 취소합니다. 모든 액티비티가 FragmentActivity를 확장 할 수 있습니다 : ListAcitivity는 단지 도우미 클래스이며, 모든 목록 관련 항목을 직접 처리 할 수 ​​있으며 FragmentActivity는 기본 Activity 클래스를 확장합니다.

따라서 FragmentActivity를 확장하는 수신기 등록을 처리하는 사용자 지정 기본 클래스를 만드는 것이 좋습니다. 모든 귀하의 conject 활동 클래스는이 기본 클래스를 확장해야합니다.