错误:YouTubeService已泄露IntentReceiver ...您是否错过了对unregisterReceiver()的调用?

时间:2016-02-28 05:11:40

标签: android youtube-api android-youtube-api

我使用YoutubeServie API在我的Android应用程序中播放youtube视频。但是当我退出我的活动时,我发现下面的崩溃日志显示,甚至我的应用程序仍然有用。

02-28 15:54:02.081 20374-20374/? E/ActivityThread: Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver com.google.android.libraries.youtube.player.audiofocus.HeadsetPlugReceiver@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.android.libraries.youtube.player.audiofocus.HeadsetPlugReceiver@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.libraries.youtube.player.audiofocus.AudioBecomingNoisyReceiver@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.libraries.youtube.player.audiofocus.AudioBecomingNoisyReceiver@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)

这些代码都不是来自我的应用程序,但都在库中。我没有在我的代码中注册任何接收器,因此无法注销我的片段中与youtubeservice一起使用的任何内容。

我认为这个问题与https://groups.google.com/forum/#!topic/android-developers/6gzpwkaRgoE类似,但没有给出答案。知道如何摆脱youtube.api.service的内部崩溃吗?

2 个答案:

答案 0 :(得分:0)

即使您没有手动注册任何接收器,活动也可以注册它以某种方式在当前活动中使用它。我认为您应该在 onPause()上调用 unregisterReceiver()方法。

请注意,不保证会调用onDestroy()和onStop()。 如果将调用onPause(),则Activity不再位于前台。

  

<强>调用OnStop():

     

当您不再对用户可见时调用。您接下来将收到onRestart(),onDestroy()或什么都没有,具体取决于以后的用户活动。   请注意,在内存不足的情况下,可能永远不会调用此方法,在这种情况下,系统没有足够的内存来保持活动进程在调用onPause()方法后运行。

     

有关详细信息,请访问以下链接:http://developer.android.com/reference/android/app/Activity.html#onStop%28%29

幸运的是,我还发现了一些你可以参考的stackoverflow项目:

我希望这会有所帮助。

答案 1 :(得分:-1)

我解决了这个问题:

在manifest.xml中声明类似的内容。

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