我使用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的内部崩溃吗?
答案 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" />