활동에서 생성 된 브로드 캐스트 서비스를 언제 등록 / 등록 해제해야합니까?
활동의 onCreate 이벤트에서 사용자 지정 브로드 캐스트 수신을 취소하고 이벤트 활동의 onDestroy에서 브로드 캐스트 수신의 등록을 취소해야합니다.
명확성을 위해 내가 사용하는 코드의 일부입니다.
public class AnActivity extends Activity {
private ResponseReceiver receiver;
public class ResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP =
"mypackagename.intent.action.MESSAGE_PROCESSED";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Start a dialogue if message indicates successfully posted to server
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new ResponseReceiver();
registerReceiver(receiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
onPause / onResume 및 onStart / onStop 이벤트도 브로드 캐스트하는 등록 및 등록 취소해야한다는 것을 읽었습니다.
나는 이것에 대한 모범 사례를보고 그 이유를 이해하고 싶습니다.
접수 onStart()
및 onStop()
.
활동이 등록되는 유일한 이유는 BroadcastReceiver
사용자에게 이벤트를 알리기 위해 현재 활동에서 어떤 방식 으로든 이벤트를 사용하는 것입니다. 경우 onStop()
호출 된 후,이 Activity
전경에 더 이상 없다, 따라서 사용자를 업데이트하지 않습니다.
백그라운드에서 브로드 캐스트 캐스트 이벤트를 수신하고 여기에 서비스 사용을 적절 합니다 .
Konstantin이 말했듯이, onDestroy()
은 (는) 호출이 보장 Activity
되고 있습니다 , 가 더 이상 열리지 않을 때 오랫동안 방송을 계속 수신 할 수 있습니다.
로가 onDestroy()
사용된다 호출 할 보증되지 않은 onPause()
등록 해제. 브로드 캐스트 수신의 수명주기 고려 : 활동이 포 그라운드에있을 때만 활성화해야합니까? 그런 다음 onResume()
/onPause()
안드로이드 문서는 브로드 캐스트 수신기를 등록 / 등록 취소 할 수있는 단일 위치를 규정하지 않지만 / 및 / 를 가능성으로 언급 합니다 .onStart()
onStop()
onResume()
onPause()
이 결정을 내리는 가장 큰 사건은 업무가 작업을 수행 할 수 있습니다. 등록 및 등록 취소시기가 결정됩니다.
캐스트에 대해 뭔가를해야할까요? 당신은에 등록을 취소 / 등록 할 수 있습니다
onPause()
/onReceive()
. (onStart()
/ 와 같이 더 긴 수명을 사용할 수도onStop()
있지만 수신자가onReceive()
활동에 초점이 있는지 확인하는 동안 확인해야 우리합니다 .)(예 : 대화 상자가 표시 될 때) 표시 될 때 작업을 수행해야합니까? 그렇다면
onStart()
/를 사용하십시오onStop()
(더 긴 수명 또는이지만 수신자onReceive()
는 활동이-display되는지 여부를 확인해야 우리합니다).발송은 활동이 브로드 캐스트에 대해 무엇입니까? 예를 들어, 이 표시 될 때 결과 상태를 반영 할 수있는 일이 발생했음을 기억해야 활동? 그런 다음
onCreate()
/ 를 사용onDestroy()
하여 등록 / 등록 취소해야합니다. (많은 종류의 기능을 구현하는 다른 방법이 있습니다.)
에 onStart()
등록하는 onResume()
경우 중복되기 때문에에 등록하지 마십시오 . 먼저 onResume()
호출되지 않고 onStart()
는 호출 되지 않습니다 .
또한 onPause ()를 가능한 한 가볍게 유지 하는 것이 가장 좋습니다 .
onPause () 실행은 매우 간단하며 저장 작업을 수행 할 시간이 충분하지 않습니다. 이러한 이유로 onPause ()를 사용하여 응용 프로그램 또는 사용자 데이터를 저장하거나 네트워크 호출을 수행하거나 데이터베이스 트랜잭션을 실행해서는 안됩니다. 방법이 완료되기 전에 이러한 작업이 완료되지 않을 수 있습니다. 대신 onStop () 중에 과부하가 걸리는 종료 작업을 수행해야합니다.
그것은 그 사실 onDestroy()
되어 호출 할 보장 할 수 없습니다 시스템 메모리를 절약하기 위해 사용자의 프로세스를 종료합니다. 그러나 프로세스가 종료되면 프로세스는 어쨌든 브로드 캐스트를 수신하지 않습니다. 이 경우 방송 수신기 등록을 취소해야합니까?
Android는 onStop()
방법 을 생략하여 애플리케이션을 종료 할 수 있습니다 . 이 상황을 해결하는 가장 좋은 방법 BroadcastReceiver
은 onResume()
메서드에 등록하고 onPause()
.
onResume () 및 onPause () 메서드에서 브로드 캐스트를 등록 및 등록 취소해야합니다.
onStart ()에 등록하고 onStop ()에 등록 취소하면. 그 때 다음 문제가 발생합니다.
장치 화면이 잠금 상태이면 onStop ()이 호출되고 잠금을 해제하면 onStart ()가 호출되지 않습니다. 그래서 onResume () 및 onPause () 메서드에서 등록 및 등록 해제했습니다.
'ProgramingTip' 카테고리의 다른 글
게터와 세터의 요점은 무엇입니까? (0) | 2020.10.24 |
---|---|
Visual Studio 2012에서 줄 위로 / 아래로 바로 가기 이동 (0) | 2020.10.24 |
여러 "사용자"모델을 고안하고 (0) | 2020.10.24 |
Redux의 상태 함수를 리듀서라고 부르는 이유는 무엇입니까? (0) | 2020.10.24 |
Firebase 데이터 수정을 제한하는 방법은 무엇입니까? (0) | 2020.10.24 |