"수신기는 등록되지" Android 개발자 콘솔 (2 개의 보고서 만 있고 내 앱에는 수천 명의 사용자가 있음)의 보고서 예외는 unregisterReceiver()에 의해 트리거됩니다. 무슨 일이 일어날 수 있습니까? try-catch로 둘러싼다고 확신하지 않습니다.이상한 onResume() 내가 예외
답변
우리는이 오류를 본 적이 특정 화면을 표시 한 다음 두 방향 변경 (예 : 장치를 거꾸로 뒤집기)을 즉시 수행합니다. unregisterReceiver에 대한
이 API의 문서는 말한다 :
등록 취소 이전에 등록 된 브로드 캐스트 리시버는.
명시 적으로 말하지는 않았지만, 본 적이 있듯이 IllegalArgumentException: Receiver not registered
이 아직 등록되지 않았다면 맞았습니다.
나는 Receiver를 멤버 필드로 저장하고 등록되지 않은 경우 null로 설정합니다. 즉, null로 초기화 한 다음 등록 할 때만 설정합니다. 이것은 완벽하지 않을 수도 있지만 내 충돌을 해결합니다! 에서
private Receiver mReceiver = null;
내 onServiceConnected :에서
sLog.debug("Registering receiver");
mReceiver = new Receiver();
registerReceiver(mReceiver, filter);
을 내 onServiceDisconnected :
BroadcastReceiver
은
onCreate()
수명주기 방법에 등록해야
if (mReceiver == null)
{
sLog.info("Do not unregister receiver as it was never registered");
}
else
{
sLog.debug("Unregister receiver");
unregisterReceiver(mReceiver);
mReceiver = null;
}
예를 들어 수신기가 실제로 전에 등록되지 않은 상태가있을 수 있습니다. 사용자가 앱을 종료합니다.
는등록 해제를 실행하기 전에 수신기에 대한 검사를 추가하려고 할 수 있습니다은, (나는 몇몇 경우에 이런 짓을 한) 하십시오에 긴 눌러를 할 때
protected void onPause() {
if(timeTickReceiver != null) {
unregisterReceiver(timeTickReceiver);
}
}
:
private BroadcastReceiver receiver;
@Overrride
public void onCreate(Bundle savedInstanceState){
IntentFilter filter = new IntentFilter();
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
...
}
}
registerReceiver(receiver, filter);
}
그리고 BroadcastReceiver
은 onDestory()
수명주기 방법으로 등록 해제해야합니다
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
}
이
은 아직 등록되지 않은BroadcastReceiver
등록을 취소의 시나리오를 방지 할 수 있습니다.
파괴시 (https://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29) 호출 할 수 없습니다. 리소스를 바인딩하는 것이 좋습니다 .Remume-onPause – Picci
방송 수신기/코드 주위에 catch 블록을 시도 포장
protected void onPause() {
this.unregisterReceiver(reciever);
super.onPause();
}
소스가있는 곳 ? –
가장 쉬운 옵션이 될 것 onPause()
수명주기 방법에서 등록 해제해야합니다.
try{
...
this.unregisterReceiver(reciever);
}
catch(IllegalArgumentException e)
{
// TODO: handle exception
}
catch (Exception e) {
// TODO: handle exception
}
- 1. 이상한 예외
- 2. 이상한 오류 : -CoreAnimation : 예외 예외 :
- 3. 이상한 처리되지 않은 예외
- 4. onResume() 문제
- 5. Clickonce 이상한 예외
- 6. 이상한 UITableViewCell로드 중 예외
- 7. WCF 서버의 이상한 예외
- 8. 자바 물질 - 이상한 예외
- 9. Android-onResume() in Paint
- 10. Visual Studio C++ 예외 ... 이상한
- 11. InputStream이있는 이상한 널 포인터 예외
- 12. onPause, Android의 onResume 이벤트
- 13. SQL은 내가 이상한 문제가
- 14. 내가 이상한 문제가 생겼
- 15. DataGridView 및 다중 스레드 사용시 이상한 예외
- 16. MyLocationOverlay가 사라지고 거기에 없습니다 onResume
- 17. SOAP 요청을 보낼 때 이상한 XML 예외
- 18. 내가 본 이상한 CSS 문제
- 19. 이상한 SOLR 내가 다음 쿼리를
- 20. 유닉스 내가 이상한 무언가를하고 싶었다
- 21. 내가 페이지에있는 DropDownList가 이상한 행동
- 22. 셀레늄 : IE7 내가 예외 gettnig하고
- 23. 앱은 내가 가진 대신 예외
- 24. onCreate() 또는 onResume()에서 서비스에 바인딩
- 25. Android - onPause/onResume 메서드를 제대로 처리하는 방법?
- 26. C 이상한 행동은 내가 아파치 post_config 처리기에서이 이상한 행동이
- 27. 이상한 VIM의 색상 구성표가, 내가 이상한 정력 인터페이스를 가지고
- 28. OAuth의 콜백은 onResume()을 호출하지 않습니다.
- 29. onPause 및 onResume 후에 MediaPlayer가 작동하지 않습니다.
- 30. onResume()을 사용하여 활동 새로 고침
어떤 API 버전에서 발생합니까? –
모르겠다. 나는 오류 보고서에서 그것을 볼 수 없다. – fhucho
일부 휴대폰에서는'onResume' 이벤트가'onCreate' 이후에 항상 호출되는 것은 아니며,이 활동에 대한 첫 번째'onPause'에서 문제를 일으킨다 고 생각합니다. – Xion