Service com.google.android.youtube.api.service.YouTubeService has leaked IntentReceiver uds@5fa5135

笑着哭i 提交于 2020-01-05 04:15:11

问题


Every time I remove the YouTubePlayerSupportFragment from the back stack, I get the error below in the 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

What I am doing wrong? Before removing fragment I did set all resources to null and called release() on the player instance but this log is still there.


回答1:


Well after trying multiple ways to use Youtube player fragment in project where we show list of videos in recycler view and each can be played in place (off course one at a time ).

Managing proper life cycle only ( calling release when removing fragment from one place to other ) will work only until you do it rapidly and if you happen to try to play 2 videos simultaneously the above issue will occur (ie internally youtube sdk will leak some touch event in message queue)

so instead of replacing youtube fragments for each video we create only one instance of fragment and reuse it at all places in app and if activity life cycle event (on pause/stop or on saved instance state is called) then we release the fragment and on resume we again create that single active instance of youtube fragment

this approach has practically fixed above issue as well https://issuetracker.google.com/issues/78370483



来源:https://stackoverflow.com/questions/44488780/service-com-google-android-youtube-api-service-youtubeservice-has-leaked-intentr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!