2017-03-17 29 views
3

私はRecyclerViewに画像とYouTubeサムネイルのリストを持っています。ユーザーがYouTubeのサムネイルをクリックすると、上半分に埋め込みYouTube動画(YouTube Android Player API部分を使用)と下半分に説明、タイトルなどを表示する新しいアクティビティが開きます。RecyclerViewを使用している場合、Android YouTube APIのメモリリーク

私の問題は、関係なく、私はYouTube Android Player APIを実装してみてくださいどのように、Androidのメーカー& Leak Canaryはいつも私がRecyclerViewに戻るには戻るボタンを押したときに、それが漏れています表示されませんされています。私はむしろLeakCanaryに新しく、Androidは全体として発展しています。私が漏れを提供することができる詳細がさらにある場合は、私に知らせてください。私はそれを含めるためにこの投稿を編集します。

私は両方の方法のYouTubeは、提案YouTubePlayerFragmentYouTubePlayerViewまた、この作業を取得する多くの方法を試してみました。この時点で、私は何をすべきか分からない。これは、YouTube APIを使用した場合にのみ発生します。画像を表示すると、Activityは漏れません。どんな助けでも大歓迎です、私は私の髪を引き出す準備ができています。

LeakCanary

YouTubePlayerActivityは、それがYouTube APIではありません、私のクラスです。また、LeakCanaryトレースのいずれかを展開しても、詳細は表示されません。

Youtube Leak Canary

RecyclerView

これは私が私のYouTubePlayerActivityを開き、私のonClickListener()を設定し、私のonBindViewHolder()です。

mImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Context context = v.getContext(); 

       Intent youtubeIntent = new Intent(context,YouTubePlayerActivity.class); 

       Bundle bundle = new Bundle(); 

       bundle.putString("foo", object.getUrl()); 
       bundle.putString("foo1", object.getDescription()); 

       youtubeIntent.putExtras(bundle); 

       context.startActivity(youtubeIntent, bundle); 

       } 
     }); 

YouTubePlayerActivity.class

私のYouTubeプレーヤーが表示されているクラスのスリムバージョン。これは私がそれを実装しようとした多くの方法の最後でした。しかし、どのように私がそれを実装しようとしたとしても、漏れは存在しました。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.detail_main_youtube); 

    Bundle bundle = getIntent().getExtras(); 

    url = bundle.getString("foo"); 
    description = bundle.getString("foo1"); 


    TextView detailDescription = (TextView) findViewById(R.id.txt_detail_description_youtube); 
detailDescription.setText(description); 

    myFragment = PlayerYouTubeFrag.newInstance("Some random YouTube Id"); 
    myTransaction = getFragmentManager().beginTransaction(); 
    myTransaction.addToBackStack(null); 
    myTransaction.replace(R.id.youtube_fragment, myFragment).commit(); 

} 

PlayerYouTubeFrag

public class PlayerYouTubeFrag extends YouTubePlayerFragment { 

private YouTubePlayer activePlayer; 

public static PlayerYouTubeFrag newInstance(String youTubeId) { 

    PlayerYouTubeFrag playerYouTubeFrag = new PlayerYouTubeFrag(); 

    Bundle bundle = new Bundle(); 
    bundle.putString("youTubeId", youTubeId); 

    playerYouTubeFrag.setArguments(bundle); 
    playerYouTubeFrag.init(); 
    return playerYouTubeFrag; 
} 

private void init() { 

    initialize(Config.YOUTUBE_API_KEY, new YouTubePlayer.OnInitializedListener() { 

     @Override 
     public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) { 
     } 

     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 
      activePlayer = player; 
      activePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
      if (!wasRestored) { 
       activePlayer.loadVideo(getArguments().getString("youTubeId"), 0); 

      } 
     } 
    }); 
} 

} 

XMLレイアウト

これは、フラグメントに置き換えられて、私のYouTubePlayerActivityのXMLフレームレイアウト、です。

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/detail_main_youtube" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="@color/backgroundColor"> 


    <FrameLayout 
     android:id="@+id/youtube_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:visibility="visible" /> 

    <ScrollView 
     android:id="@+id/scroll_view_youtube" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

      <TextView 
       android:id="@+id/txt_detail_description_youtube" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="20dp" 
       android:layout_marginLeft="15dp" 
       android:layout_marginRight="15dp" 
       android:layout_marginTop="20dp" 
       android:background="@color/backgroundColor" 
       android:lineSpacingExtra="5dp" 
       android:textColor="@color/darkTextColor" 
       android:textSize="15sp" /> 

    </ScrollView> 
</LinearLayout> 
+0
+0

あなたはIntentを置き換えることができますyoutubeIntent = newIntent(context、YouTubePlayerActivity.class);インテントによってyoutubeIntent = newIntent(getApplicationContext()、YouTubePlayerActivity.class);一度、それがクラッシュするかどうかチェックしますか? – DevKRos

答えて

0

あなたPlayerYouTubeFragコードでこれらの行を追加してください:RecyclerViewアダプタのコードを追加してください

@Override 
public void onDetach() { 
    super.onDetach(); 
    activePlayer.release(); 
    activePlayer = null; 
} 
関連する問題