2016-02-28 12 views
5

Używam interfejsu API serwisu YoutubeServie do odtwarzania filmów z youtube w mojej aplikacji na Androida. Jednak po wyjściu z mojej aktywności, znalazłem poniżej pokazujący się dziennik awarii, nawet moja aplikacja nadal działa.Błąd: usługa YouTube Service wyciekła IntentReceiver ... Czy brakuje połączenia, aby wyrejestrowaćReceiver()?

02-28 15:54:02.081 20374-20374/? E/ActivityThread: Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver com.google.[email protected]a843e7c that was originally registered here. Are you missing a call to unregisterReceiver()? 
                android.app.IntentReceiverLeaked: Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver com.google.[email protected]a843e7c that was originally registered here. Are you missing a call to unregisterReceiver()? 
                 at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:898) 
                 at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:699) 
                 at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1637) 
                 at android.app.ContextImpl.registerReceiver(ContextImpl.java:1617) 
                 at android.app.ContextImpl.registerReceiver(ContextImpl.java:1611) 
                 at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:488) 
                 at com.google.android.libraries.youtube.player.service.PlaybackService.<init>(PlaybackService.java:5034) 
                 at com.google.android.libraries.youtube.player.PlayerInjector$12.create(PlayerInjector.java:1602) 
                 at com.google.android.libraries.youtube.common.util.Lazy.get(Lazy.java:136) 
                 at com.google.android.libraries.youtube.player.PlayerInjector.getPlaybackService(PlayerInjector.java:575) 
                 at com.google.android.apps.youtube.api.ApiPlayer.moveToForeground(ApiPlayer.java:493) 
                 at com.google.android.apps.youtube.api.ApiPlayer.<init>(ApiPlayer.java:150) 
                 at com.google.android.apps.youtube.api.service.jar.ApiPlayerService.<init>(ApiPlayerService.java:131) 
                 at com.google.android.apps.youtube.api.service.jar.ApiPlayerFactoryService$1.run(ApiPlayerFactoryService.java:86) 
                 at android.os.Handler.handleCallback(Handler.java:739) 
                 at android.os.Handler.dispatchMessage(Handler.java:95) 
                 at android.os.Looper.loop(Looper.java:135) 
                 at android.app.ActivityThread.main(ActivityThread.java:5221) 
                 at java.lang.reflect.Method.invoke(Native Method) 
                 at java.lang.reflect.Method.invoke(Method.java:372) 
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
02-28 15:54:02.088 20374-20374/? E/ActivityThread: Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver com.google.android[email protected]379c216f that was originally registered here. Are you missing a call to unregisterReceiver()? 
                android.app.IntentReceiverLeaked: Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver com.google.android[email protected]379c216f that was originally registered here. Are you missing a call to unregisterReceiver()? 
                 at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:898) 
                 at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:699) 
                 at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1637) 
                 at android.app.ContextImpl.registerReceiver(ContextImpl.java:1617) 
                 at android.app.ContextImpl.registerReceiver(ContextImpl.java:1611) 
                 at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:488) 
                 at com.google.android.libraries.youtube.player.service.PlaybackService.<init>(PlaybackService.java:4043) 
                 at com.google.android.libraries.youtube.player.PlayerInjector$12.create(PlayerInjector.java:1602) 
                 at com.google.android.libraries.youtube.common.util.Lazy.get(Lazy.java:136) 
                 at com.google.android.libraries.youtube.player.PlayerInjector.getPlaybackService(PlayerInjector.java:575) 
                 at com.google.android.apps.youtube.api.ApiPlayer.moveToForeground(ApiPlayer.java:493) 
                 at com.google.android.apps.youtube.api.ApiPlayer.<init>(ApiPlayer.java:150) 
                 at com.google.android.apps.youtube.api.service.jar.ApiPlayerService.<init>(ApiPlayerService.java:131) 
                 at com.google.android.apps.youtube.api.service.jar.ApiPlayerFactoryService$1.run(ApiPlayerFactoryService.java:86) 
                 at android.os.Handler.handleCallback(Handler.java:739) 
                 at android.os.Handler.dispatchMessage(Handler.java:95) 
                 at android.os.Looper.loop(Looper.java:135) 
                 at android.app.ActivityThread.main(ActivityThread.java:5221) 
                 at java.lang.reflect.Method.invoke(Native Method) 
                 at java.lang.reflect.Method.invoke(Method.java:372) 
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Brak kodu pochodzą z kopalni aplikacji, ale wszystkie są w bibliotece. Nie zarejestrowałem żadnego odbiornika w moim kodzie, więc nie mogę wyrejestrować niczego w moim fragmencie, który działa z usługą youtube.

Myślę, że problem jest podobny do https://groups.google.com/forum/#!topic/android-developers/6gzpwkaRgoE, ale nie udzielono odpowiedzi. Każdy pomysł, jak pozbyć się tej wewnętrznej awarii serwisu youtube.api.service?

+0

Witaj Elye, Naprawiłeś ten problem. To jest problem, który mnie denerwuje. W miarę możliwości pomóż mi. –

+0

Witam, czy udało ci się rozwiązać ten problem? Z góry dziękuję ! :) – AnthoPak

+0

Cześć, mam do czynienia z tym samym problemem. Czy rozwiązałeś swoje? – Shrikant

Odpowiedz

0

Nawet jeśli nie zarejestrujesz ręcznie żadnego odbiornika, aktywność może zarejestrować się, aby użyć go w jakiś sposób do bieżącej aktywności. Myślę, że powinieneś zadzwonić pod numer metoda unregisterReceiver() na onPause().

Należy pamiętać, że onDestroy() i onStop() nie mogą zostać wywołane. Jeśli zostanie wywołana funkcja onPause(), działanie nie będzie już widoczne na pierwszym planie.

OnStop():

Called when you are no longer visible to the user. You will next receive either onRestart(), onDestroy(), or nothing, depending on later user activity. Note that this method may never be called, in low memory situations where the system does not have enough memory to keep your activity's process running after its onPause() method is called.

For more information, here's the link: http://developer.android.com/reference/android/app/Activity.html#onStop%28%29

Na szczęście, ja też znalazłem kilka przedmiotów StackOverflow, które można znaleźć na stronie:

Mam nadzieję, że to pomoże.

+0

Dzięki @rod. Jednak nie ma nic, co mógłbym umieścić jako argument w mojej funkcji unregisterReceiver (...). Widziałem wszystkie powyższe linki i nikt nie zna odpowiedzi. Drugi, po prostu podpowiedz, jak uruchomić API YouTube, ale wewnętrzne awarie wciąż się zdarzają ... Po mojej stronie, mam grę na youtube. Właśnie wewnętrzny dziennik wewnętrznej awarii zdarza się zawsze. Chcę wiedzieć "co", aby "wyrejestrować". – Elye

+0

Witam @Elye. Na podstawie logu konsoli użytkownika używa AudioBecomingNoisyReceiver i HeadsetPlugReceiver. Próbowałem wyszukać coś na ten temat i to prowadzi mnie do tego [link] (http://twigstechtips.blogspot.com/2013/06/android-detect-when-headsetheadphones.html). Czy jest jakiś kod odnoszący się do tego? – rod

+0

Nie. Nie używać tego. Być może to SDK YouTube Youtube używa go wewnętrznie i jest poza naszą kontrolą :(Podejrzany gdzieś w 'com.google.android.libraries.youtube.player.service.PlaybackService." Poza tym to nie jest open source ... więc może zaglądaj do niego, żeby sprawdzić – Elye

0

I rozwiązać to:

W manifest.xml Declare coś takiego.

Powiązane problemy