2016-06-12 6 views
1

アクティビティの断片にYouTubeThumbnailViewが1つあります。私は(から戻るボタンを押すときにのみ、時にはまたは)を起動したときYouTubeThumbnailLoadersのリークと解放

public class MyFragment extends Fragment { 

    private YouTubeThumbnailView mThumbnailView; 

    public class FetchThumbnailTask extends AsyncTask<> implements YouTubeThumbnailView.OnInitializedListener { 

    protected void onPostExecute(String videoId) { 
     mThumbnailView.setTag(videoId); 
     mThumbnailView.initialize(YOUTUBE_DATA_API_KEY, this); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubeThumbnailView view, YouTubeThumbnailLoader loader) { 
     loader.setVideo((String) view.getTag()); 
    } 
    } 
} 

これは、次のエラーが発生する(サムネイルをクリックする)サムネイルでビデオのためのYouTubeStandalonePlayer:ビューは、非同期タスクから設定されています:

E/ActivityThread: Activity com.example.app.MyActivity has leaked ServiceConnection [email protected] that was originally bound here 
android.app.ServiceConnectionLeaked: Activity com.example.app.MyActivity has leaked ServiceConnection [email protected] that was originally bound here 

私はこれを仮定し、それらで行われたときにYouTubeThumbnailLoader Sを解放に関するドキュメントで見つかった警告としなければなりませんでした。他のStackOverflowの質問に示唆したように、私はonInitializationSuccessからMyFragmentmThumbnailLoaderとしてローダを節約し、クリック操作でそれを解放しようとした:

@Override 
public void onInitializationSuccess(YouTubeThumbnailView view, YouTubeThumbnailLoader loader) { 
    loader.setVideo((String) view.getTag()); 
    mThumbnailLoader = loader; 
} 
@Override 
public void onClick(View v) { 
    if (mThumbnailLoader != null) { 
     mThumbnailLoader.release(); 
    } 

    Intent intent = YouTubeStandalonePlayer.createVideoIntent(getActivity(), YOUTUBE_DATA_API_KEY, (String) v.getTag()); 
    startActivity(intent); 
} 

どのように私は正しくこの問題を回避するために、ローダを解放するのですか?

答えて

0

この問題は、アクティビティ(したがってフラグメント)がclickイベント以外で破棄されたために発生しているようです。 onDestory()mThumbnailLoader.release();ブロックを繰り返して問題を解決しました。

さらに、実際のクラッシュは別の問題によって発生していました。リークされたServiceConnectionエラーはログにしか表示されず、アプリケーションにユーザーが直面する影響はありません。

関連する問題