服务com.google.android.youtube.api.Service.youtube服务泄漏了IntentReceiveruds@5fa5135
每次我从后堆栈中删除服务com.google.android.youtube.api.Service.youtube服务泄漏了IntentReceiveruds@5fa5135,android,memory-leaks,youtube,youtube-api,android-youtube-api,Android,Memory Leaks,Youtube,Youtube Api,Android Youtube Api,每次我从后堆栈中删除YouTubePlayerSupportFragment,我都会在logcat中得到以下错误: 06-12 02:08:46.937 8805-8805/ D/GA_DEBUG: Event_category:VideoContent-Portrait-This artist uses unique methods to paint his pottery action:play label:youtube {&el=youtube, &ec=VideoCon
YouTubePlayerSupportFragment
,我都会在logcat中得到以下错误:
06-12 02:08:46.937 8805-8805/ D/GA_DEBUG: Event_category:VideoContent-Portrait-This artist uses unique methods to paint his pottery action:play label:youtube {&el=youtube, &ec=VideoContent-Portrait-This artist uses unique methods to paint his pottery, &t=event, &ea=play, &cd6=online}
06-12 02:08:46.945 10194-10194/? E/ActivityThread: Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver uds@5fa5135 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 uds@5fa5135 that was originally registered here. Are you missing a call to unregisterReceiver()?
at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:946)
at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:742)
at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1188)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1168)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1162)
at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:555)
at udq.<init>(SourceFile:21)
at udx.get(SourceFile:9)
at vkq.get(SourceFile:31)
at aces.get(SourceFile:10)
at hog.a(SourceFile:26)
at hpb.a(SourceFile:883)
at hnz.<init>(SourceFile:13)
at com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerService.<init>(SourceFile:60)
at com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerFactoryService$1.run(SourceFile:10)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:152)
at android.app.ActivityThread.main(ActivityThread.java:5497)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-12 02:08:46.968 10194-10194/? E/ActivityThread: Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver udp@a7bd896 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 udp@a7bd896 that was originally registered here. Are you missing a call to unregisterReceiver()?
at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:946)
at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:742)
at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1188)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1168)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1162)
at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:555)
at vki.<init>(SourceFile:53)
at vkq.get(SourceFile:32)
at aces.get(SourceFile:10)
at hog.a(SourceFile:26)
at hpb.a(SourceFile:883)
at hnz.<init>(SourceFile:13)
at com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerService.<init>(SourceFile:60)
at com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerFactoryService$1.run(SourceFile:10)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:152)
at android.app.ActivityThread.main(ActivityThread.java:5497)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-12 02:08:47.015 8805-8805/I/ResourcesManager: isUpToDate /data/app/com.google.android.youtube-1/base.apk: true
06-12 02:08:46.937 8805-8805/D/GA_调试:事件_类别:视频内容肖像这名艺术家使用独特的方法绘制他的陶器动作:播放标签:youtube{&el=youtube,&ec=VideoContent肖像这名艺术家使用独特的方法绘制他的陶器,&t=Event,&ea=play,&cd6=online}
06-12 02:08:46.945 10194-10194/? E/ActivityThread:Service com.google.android.youtube.api.Service.youtube服务已泄漏IntentReceiveruds@5fa5135原来是在这里注册的。是否缺少对unregisterReceiver()的调用?
android.app.IntentReceiver泄漏:Service com.google.android.youtube.api.Service.youtube服务泄漏了IntentReceiveruds@5fa5135原来是在这里注册的。是否缺少对unregisterReceiver()的调用?
在android.app.LoadedApk$ReceiverDispatcher(LoadedApk.java:946)
在android.app.LoadedApk.getReceiveDispatcher(LoadedApk.java:742)上
位于android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1188)
位于android.app.ContextImpl.registerReceiver(ContextImpl.java:1168)
位于android.app.ContextImpl.registerReceiver(ContextImpl.java:1162)
位于android.content.ContextWrapper.registerReceiver(ContextWrapper.java:555)
在udq(源文件:21)
在udx.get(源文件:9)
在vkq.get(源文件:31)
在aces.get(源文件:10)
at hog.a(源文件:26)
在hpb.a(源文件:883)
在hnz。(源文件:13)
位于com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerService。(源文件:60)
位于com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerFactoryService$1.run(源文件:10)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:152)
位于android.app.ActivityThread.main(ActivityThread.java:5497)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-12 02:08:46.968 10194-10194/? E/ActivityThread:Service com.google.android.youtube.api.Service.youtube服务已泄漏IntentReceiverudp@a7bd896原来是在这里注册的。是否缺少对unregisterReceiver()的调用?
android.app.IntentReceiver泄漏:Service com.google.android.youtube.api.Service.youtube服务泄漏了IntentReceiverudp@a7bd896原来是在这里注册的。是否缺少对unregisterReceiver()的调用?
在android.app.LoadedApk$ReceiverDispatcher(LoadedApk.java:946)
在android.app.LoadedApk.getReceiveDispatcher(LoadedApk.java:742)上
位于android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1188)
位于android.app.ContextImpl.registerReceiver(ContextImpl.java:1168)
位于android.app.ContextImpl.registerReceiver(ContextImpl.java:1162)
位于android.content.ContextWrapper.registerReceiver(ContextWrapper.java:555)
在vki。(源文件:53)
在vkq.get(源文件:32)
在aces.get(源文件:10)
at hog.a(源文件:26)
在hpb.a(源文件:883)
在hnz。(源文件:13)
位于com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerService。(源文件:60)
位于com.google.android.apps.youtube.embeddedplayer.service.service.jar.ApiPlayerFactoryService$1.run(源文件:10)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:152)
位于android.app.ActivityThread.main(ActivityThread.java:5497)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-12 02:08:47.015 8805-8805/I/ResourcesManager:isUpdate/data/app/com.google.android.youtube-1/base.apk:true
我做错了什么?在删除片段之前,我确实将所有资源设置为null,并在播放器实例上调用了
release()
,但此日志仍然存在。在尝试了多种方法在项目中使用Youtube播放器片段后,我们在recycler视图中显示了视频列表,并且每个视频都可以在适当的位置播放(当然,一次只能播放一个)
仅管理正确的生命周期(在将片段从一个位置移到另一个位置时调用release)将只在您快速执行之前有效,如果您碰巧尝试同时播放两个视频,则会出现上述问题(即youtube sdk内部将在消息队列中泄漏一些触摸事件)
因此,我们不再为每个视频替换youtube片段,而是只创建片段的一个实例,并在应用程序中的所有位置重复使用它,如果调用活动生命周期事件(暂停/停止或保存的实例状态),则我们释放片段,并在恢复时再次创建单个活动的youtube片段实例
在尝试了在项目中使用Youtube播放器片段的多种方法后,这种方法实际上也解决了上述问题,在该项目中,我们在“回收者”视图中显示视频列表,并且每个视频都可以在适当的位置播放(一次只播放一个) 仅管理正确的生命周期(在将片段从一个位置移到另一个位置时调用release)将只在您快速执行之前有效,如果您碰巧尝试同时播放两个视频,则会出现上述问题(即youtube sdk内部将在消息队列中泄漏一些触摸事件) 因此,我们不为每个视频替换youtube片段,而是只创建片段的一个实例,并在应用程序中的所有位置重复使用它,如果活动生命周期事件(暂停/停止或保存的实例状态)被调用,则我们释放片段