2017-05-23 11 views
0

바인더 속성을 잃어 버린 기존 바인딩 된 서비스에 문제가있었습니다 (바인더가 어떤 이유로 든 삭제됩니다). 그래서 나는 한걸음 뒤로 물러서서 Bound Servcie를 다시 배웠습니다. 다음 페이지에서 Xamarin의 BoundServiceDemo 응용 프로그램을 다운로드했습니다. https://developer.xamarin.com/guides/android/application_fundamentals/services/part_2_-_bound_services/java.lang.IllegalArgumentException : 서비스가 등록되지 않았습니다. - Xamarin BoundServiceDemo 크래시가 발생했습니다.

프로젝트가 빌드되어 실행되었습니다. 그러나 Unbind from serviceBind to service의 시퀀스를 프로젝트의 버튼 클릭을 통해 수행하면 세 번째 stop이 일관되게 충돌합니다. 서비스에 바인딩 한 후 Get timestamp from service을 누르면 충돌이 발생하지 않습니다. 스택 트레이스는 다음과 같다 :

10월 5일부터 23일까지 : 33 : 21.334 11,788 11,788 D AndroidRuntime : 33 : 21.344 11,788 11,788 E AndroidRuntime : VM

10월 5일에서 23일까지 종료를 FATAL 예외 : 기본

10월 5일에서 23일까지 : 33 : 21.344 11,788 11,788 AndroidRuntime E : 공정 : com.xamarin.xample.boundservicedemo, PID : 11788

10월 5일부터 23일까지 : 33 : 21.344 11,788 11,788 E AndroidRuntime : 자바 .lang.IllegalArgumentException : 서비스가 등록되지 않았습니다 : [email protected]7c0e

05-23 10 : 33 : 21.344 11,788 11,788 E AndroidRuntime : android.app.LoadedApk.forgetServiceDispatcher (LoadedApk.java:1156)에서

05-23 10시 33분 : 21.344 11,788 11,788 E AndroidRuntime : android.app.ContextImpl.unbindService (ContextImpl.java:1452)에서

10월 5일에서 23일까지 : 33 : 21.344 11,788 11,788 E AndroidRuntime : android.content.ContextWrapper.unbindService에서 (ContextWrapper .java : 644)

10월 5일에서 23일까지 : 33 : 21.344 11,788 11,788 E AndroidRuntime : 33 : 21.344 11,788 11,788 E AndroidRuntime : mono.android.view.View_OnClickListenerImplementor.n_onClick (자국어 방법)

10월 5일에서 23일까지에서 에서 mono.android.view.View_OnClickListenerImplementor.onClick (View_OnClickListenerImplementor.java:30)

10월 5일에서 23일까지 : 33 : 21.344 11,788 11,788 E AndroidRuntime : android.view.View.performClick (View.java:5697)에서

05-23 10 : 33 : 21.344 11788 11788 E AndroidRuntime : at android.widget android.view.View에서 $ PerformClick.run (View.java:22526)

에서 : .TextView.performClick (TextView.java:10814)

10월 5일부터 23일까지 : 33 : 21.344 11,788 11,788 E AndroidRuntime 05-23 10 : 33 : 21.344 11,788 11,788 E AndroidRuntime : 33 : 21.344 11,788 11,788 E AndroidRuntime : android.os.Handler.handleCallback (Handler.java:739)

10월 5일부터 23일까지에서 로이드에서. os.Handler.dispatchMessage (Handler.java:95)

05-23 10 : 33 : 21.344 11788 11788 E AndroidRuntime : at android.os.Looper.loop (Looper.자바 : 158)

10월 5일에서 23일까지 : 33 : 21.344 11,788 11,788 E AndroidRuntime : android.app.ActivityThread.main (ActivityThread.java:7229 AT)

10월 5일에서 23일까지 : 33 : 21.344 11788 11788 E AndroidRuntime : 33 : 21.344 11788 11788 E AndroidRuntime : java.lang.reflect.Method.invoke (기본 방법)

10월 5일에서 23일까지에서 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller에서. 실행 (ZygoteInit.java:1230)

05-23 10 : 33 : 21.344 11788 11788 E AndroidRuntime :백45경1천5백15조5백36억9천1백36만3천2백10 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

10월 5일에서 23일까지 : 33 : 21.344 4699 4724 W VirtualScreenManagerService : moveTaskBackToDisplayIfNeeded() : 최고 활성 또는 앱 널

33 :

10월 5일에서 23일까지 21.354 4699 4724 D InputDispatcher : 자 마린 버전 4.5.0.443와 XXXX

내가 사용하고 VS2015 :에 집중 응용 프로그램 세트. 내 응용 프로그램이 수명 동안 여러 바인딩/바인딩 해제 서비스를 수행하기 때문에 이것이 Xamarin의 버그가 아니기를 바랍니다. 누군가 빛을 비출 수 있습니까? 고맙습니다.

답변

0

샘플 코드 Tom Opgenorth의 저자에게 연락하여 충돌을 일으키는 Click 이벤트에 대한 이벤트 처리기의 동적 설정이라고 생각합니다. 이벤트 핸들러는 활동이 시작될 때 한 번 등록되도록 수정되었습니다. 문제가 해결되었습니다.

Tom의 정보에 따라 RestartServiceButton 클릭 이벤트 처리기가 서비스 중지 버튼을 클릭 할 때마다 등록되었지만 응용 프로그램이 중지 될 때까지 등록이 해제되지 않았 음을 발견했습니다. 즉, RestartServiceButton 클릭 이벤트는 이후의 각 클릭에 대해 여러 번 실행됩니다. 문제가 또한 이벤트에서 자신을 등록 취소하여 해결할 수 있습니다 그래서 때 화재

void RestartServiceButton_Click(object sender, System.EventArgs e) 
{ 
    ... 
    restartServiceButton.Click -= RestartServiceButton_Click; 
} 

톰은 곧

를 업데이트 된 버전을 업로드해야