2016-02-28 28 views
5

Io utilizzo l'API di YouTubeServer per riprodurre i video di YouTube nella mia applicazione Android. Tuttavia, quando esco dall'attività, ho trovato il seguente registro degli arresti anomali, anche se la mia app funziona ancora.Errore: YouTubeService ha perso IntentReceiver ... Ti manca una chiamata a unregisterReceiver()?

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) 

Nessuno del codice proviene dalla mia app, ma tutti sono nella libreria. Non ho registrato alcun destinatario nel mio codice, quindi non posso annullare la registrazione di qualcosa nel mio frammento che funziona con il servizio youtubes.

Penso che il problema sia simile a https://groups.google.com/forum/#!topic/android-developers/6gzpwkaRgoE ma nessuna risposta fornita. Qualche idea su come sbarazzarsi di questo crash interno di youtube.api.service?

+0

Ciao Elye, hai risolto questo problema. Questo è il problema mi sta annoiando. Gentilmente aiutami se possibile. –

+0

Ciao, sei riuscito a risolvere questo problema? Grazie in anticipo ! :) – AnthoPak

+0

Ciao, sto affrontando lo stesso problema. Hai risolto il tuo? – Shrikant

risposta

0

Anche se non si registra manualmente alcun ricevitore, un'attività potrebbe registrarlo per utilizzarlo in qualche modo sull'attività corrente. Penso che sia necessario chiamare il metodo unregisterReceiver() su onPause().

Si noti che onDestroy() e onStop() non sono garantiti per essere chiamati. Se viene chiamato onPause(), l'attività non è più in primo piano.

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

Per fortuna, ho trovato anche alcuni elementi StackOverflow che è possibile fare riferimento a:

Spero che questo vi aiuterà.

+0

Grazie @rod. Tuttavia, non c'è nulla che possa essere inserito come argomento nella mia funzione unregisterReceiver (...). Ho visto tutti i link sopra, e nessuno ha la risposta. Il secondo, guida solo uno come far sì che l'API di YouTube vada, ma i crash interni continuano ancora ... Da parte mia, ho l'youtube che suona bene. Solo il registro interno del crash interno si verifica sempre. Voglio sapere "cosa" per "annullare la registrazione". – Elye

+0

Ciao @Elye. In base al log della console, sono in uso AudioBecomingNoisyReceiver e HeadsetPlugReceiver. Ho provato a cercare qualcosa su questo e mi porta a questo [link] (http://twigstechtips.blogspot.com/2013/06/android-detect-when-headsetheadphones.html). C'è qualcuno del tuo codice che si riferisce a questo? – rod

+0

No. Non usarlo. Forse è l'SDK dell'API di YouTube che lo utilizza internamente ed è fuori dal nostro controllo :(. Sospetto da qualche parte in "com.google.android.libraries.youtube.player.service.PlaybackService" Inoltre, non è open source ... quindi può scavare per controllare – Elye

0

Ho risolto questo:

In manifest.xml Dichiarare qualcosa di simile.

<activity 
    android:name=".YouTubeActivity" 
    android:configChanges="keyboardHidden|orientation|screenSize" 
    android:screenOrientation="landscape" 
    android:theme="@style/AppTheme.NoActionBar" />