代码之家  ›  专栏  ›  技术社区  ›  S.P.

ServiceConnectionLeak with youtube api

  •  1
  • S.P.  · 技术社区  · 8 年前

    首先,我在这里的一些线程中读到了这个问题,我知道用应用程序上下文替换getActivity()可以解决这个问题。所有这些答案都来自几年前,现在我认为它不支持应用程序上下文,因为我在放置应用程序上下文时出错,在库的方法中,我找不到任何可以放置应用程序上下文的方法。

    当我创建tye YoutubeStandalonePlayer时,我正在这样做:

    Intent intent = YouTubeStandalonePlayer.createVideoIntent(getActivity(), getResources().getString(google_maps_key), mPublication.getYoutubeCode());
    

     Intent intent = YouTubeStandalonePlayer.createVideoIntent(ApplicationConfig.getAppContext(), getResources().getString(google_maps_key), mPublication.getYoutubeCode());
    

    那么,我的问题是。。。如何解决使用YouTubeStandalonePlayer的ServiceConnectionLeak问题:

    android.app.ServiceConnectionLeaked: Activity com.buzinger.loycus.activity.HomeActivity has leaked ServiceConnection com.google.android.youtube.player.internal.r$e@cbfec60 that was originally bound here
    

    提前感谢

    1 回复  |  直到 8 年前
        1
  •  3
  •   Simpson    8 年前

    试试我在这个网站上找到的这个解决方案( https://androidadagnitio.wordpress.com/2017/03/09/activity-has-leaked-serviceconnection-com-google-android-youtube-player-internal-re391c339-that-was-originally-bound-here-error-solution/ )

    您需要添加这一行,以避免使用youtube api访问ServiceConnectionLeak。

     youTubeThumbnailLoader.release();
    

    所有代码:

     @Override
        public void onBindViewHolder(final VideoInfoHolder holder,final int position) {
    
            holder.youTubeThumbnailView.initialize(DEVELOPER_KEY, new YouTubeThumbnailView.OnInitializedListener() {
                @Override
                public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, final YouTubeThumbnailLoader youTubeThumbnailLoader) {
    
                    youTubeThumbnailLoader.setVideo(videos.get(position));
              //here is the magic to solve the logcat error 
                    youTubeThumbnailLoader.setOnThumbnailLoadedListener(new YouTubeThumbnailLoader.OnThumbnailLoadedListener() {
                        @Override
                        public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) {
                            youTubeThumbnailView.setVisibility(View.VISIBLE);
                            holder.relativeLayoutOverYouTubeThumbnailView.setVisibility(View.VISIBLE);
                            youTubeThumbnailLoader.release();
                        }
    
                        @Override
                        public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) {
    
                        }
                    });
                }
    
                @Override
                public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {
                    //write something for failure
                }
            });
        }