2016-06-12 67 views
1

我有一个活动片段,其中有一个YouTubeThumbnailView。该视图是从一个异步任务设置:泄漏并释放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节省MyFragment装载机为mThumbnailLoader,并在点击动作释放它:

@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事件以外的其他事件破坏了活动(并因此导致碎片)。简单地重复mThumbnailLoader.release();onDestory()解决了问题。

此外,实际崩溃是由另一个问题引起的。在它自己泄漏的ServiceConnection错误只在日志中可见,没有任何用户面临的应用程序的影响。

相关问题