私はRecyclerView
に画像とYouTubeサムネイルのリストを持っています。ユーザーがYouTubeのサムネイルをクリックすると、上半分に埋め込みYouTube動画(YouTube Android Player API
部分を使用)と下半分に説明、タイトルなどを表示する新しいアクティビティが開きます。RecyclerViewを使用している場合、Android YouTube APIのメモリリーク
私の問題は、関係なく、私はYouTube Android Player API
を実装してみてくださいどのように、Androidのメーカー& Leak Canaryはいつも私がRecyclerView
に戻るには戻るボタンを押したときに、それが漏れています表示されませんされています。私はむしろLeakCanary
に新しく、Androidは全体として発展しています。私が漏れを提供することができる詳細がさらにある場合は、私に知らせてください。私はそれを含めるためにこの投稿を編集します。
私は両方の方法のYouTube
は、提案YouTubePlayerFragment
とYouTubePlayerView
また、この作業を取得する多くの方法を試してみました。この時点で、私は何をすべきか分からない。これは、YouTube API
を使用した場合にのみ発生します。画像を表示すると、Activity
は漏れません。どんな助けでも大歓迎です、私は私の髪を引き出す準備ができています。
LeakCanary
YouTubePlayerActivity
は、それがYouTube API
ではありません、私のクラスです。また、LeakCanary
トレースのいずれかを展開しても、詳細は表示されません。
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>
を。 – AndroidRuntimeException
あなたはIntentを置き換えることができますyoutubeIntent = newIntent(context、YouTubePlayerActivity.class);インテントによってyoutubeIntent = newIntent(getApplicationContext()、YouTubePlayerActivity.class);一度、それがクラッシュするかどうかチェックしますか? – DevKRos