Android setRaetainInstance时Youtube泄漏了服务连接(true)
我有以下错误的问题:Android setRaetainInstance时Youtube泄漏了服务连接(true),android,youtube-api,Android,Youtube Api,我有以下错误的问题: 04-26 11:41:58.662: E/ActivityThread(10933): Activity MyActivity has leaked ServiceConnection com.google.android.youtube.player.internal.r$e@2cf388d that was originally bound here 我有一个片段,在onCreate中设置了以下内容: /** * */ @Override public voi
04-26 11:41:58.662: E/ActivityThread(10933): Activity MyActivity has leaked ServiceConnection com.google.android.youtube.player.internal.r$e@2cf388d that was originally bound here
我有一个片段,在onCreate中设置了以下内容:
/**
*
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRetainInstance(true);
}
我设置这个是因为我有一个带有缩略图的YouTubevideo列表,而我没有
希望用户每次旋转屏幕时都重新加载这些缩略图。
那只是不必要的交通
以下是我的listview适配器:
public class YoutubeListAdapter extends BaseAdapter {
private List<TutorialEntry> entries = null;
private List<View> entryViews = null;
private Map<YouTubeThumbnailView, YouTubeThumbnailLoader> thumbnailViewToLoaderMap = null;
private LayoutInflater inflater = null;
private TutorialThumbnailListener thumbnailListener = null;
private boolean labelsVisible = false;;
public YoutubeListAdapter(Context context, List<TutorialEntry> entries) {
this.entries = entries;
this.entryViews = new ArrayList<View>();
this.thumbnailViewToLoaderMap = new HashMap<YouTubeThumbnailView, YouTubeThumbnailLoader>();
this.inflater = LayoutInflater.from(context);
this.thumbnailListener = new TutorialThumbnailListener(this.thumbnailViewToLoaderMap);
this.labelsVisible = true;
}
@Override
public int getCount() {
return this.entries.size();
}
@Override
public TutorialEntry getItem(int position) {
return entries.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TutorialEntry entry = entries.get(position);
ViewHolder holder = null;
if (convertView == null) {
convertView = this.inflater.inflate(R.layout.fragment_tutorials_row, parent, false);
holder = new ViewHolder();
holder.thumbnail = (YouTubeThumbnailView) convertView.findViewById(R.id.tutorials_row_thumbnail);
holder.thumbnail.setTag(entry.getVideoId());
holder.thumbnail.initialize(Globals.GOOGLE_API_KEY, this.thumbnailListener);
holder.textViewTitle = (TextView) convertView.findViewById(R.id.tutorials_row_title);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
YouTubeThumbnailLoader loader = this.thumbnailViewToLoaderMap.get(holder.thumbnail);
if (loader == null) {
holder.thumbnail.setTag(entry.getVideoId());
} else {
holder.thumbnail.setImageResource(R.drawable.youtube_loading_thumbnail);
loader.setVideo(entry.getVideoId());
}
}
holder.textViewTitle.setText(entry.getTitle());
holder.textViewTitle.setVisibility(labelsVisible ? View.VISIBLE : View.GONE);
return convertView;
}
public void releaseLoaders() {
for (YouTubeThumbnailLoader loader : this.thumbnailViewToLoaderMap.values()) {
loader.release();
}
}
public void setLabelVisibility(boolean labelsVisible) {
this.labelsVisible = labelsVisible;
for (View view : this.entryViews) {
view.findViewById(R.id.tutorials_row_title).setVisibility(labelsVisible ? View.VISIBLE : View.GONE);
}
}
private static class ViewHolder {
private YouTubeThumbnailView thumbnail = null;
private TextView textViewTitle = null;
}
}
有人能帮我了解那里发生了什么,以及我如何解决这个问题吗?这个异常通常来自于没有释放所有加载程序。据我所知,您从不调用
releaseLoaders()
方法,因此,由于活动被破坏时,加载程序只是坐在那里。按照安卓的设计方式,你应该释放这些加载程序,否则你会出现内存泄漏
就我个人而言,我将我的加载程序版本放在我的onstop()
方法中,它工作得非常出色
@Override
public void onStop() {
super.onStop();
for (YouTubeThumbnailLoader loader : thumbnailViewToLoaderMap.values()) {
loader.release();
}
}
此异常通常来自未释放所有加载程序。据我所知,您从不调用
releaseLoaders()
方法,因此,由于活动被破坏时,加载程序只是坐在那里。按照安卓的设计方式,你应该释放这些加载程序,否则你会出现内存泄漏
就我个人而言,我将我的加载程序版本放在我的onstop()
方法中,它工作得非常出色
@Override
public void onStop() {
super.onStop();
for (YouTubeThumbnailLoader loader : thumbnailViewToLoaderMap.values()) {
loader.release();
}
}
此异常通常来自未释放所有加载程序。据我所知,您从不调用
releaseLoaders()
方法,因此,由于活动被破坏时,加载程序只是坐在那里。按照安卓的设计方式,你应该释放这些加载程序,否则你会出现内存泄漏
就我个人而言,我将我的加载程序版本放在我的onstop()
方法中,它工作得非常出色
@Override
public void onStop() {
super.onStop();
for (YouTubeThumbnailLoader loader : thumbnailViewToLoaderMap.values()) {
loader.release();
}
}
此异常通常来自未释放所有加载程序。据我所知,您从不调用
releaseLoaders()
方法,因此,由于活动被破坏时,加载程序只是坐在那里。按照安卓的设计方式,你应该释放这些加载程序,否则你会出现内存泄漏
就我个人而言,我将我的加载程序版本放在我的onstop()
方法中,它工作得非常出色
@Override
public void onStop() {
super.onStop();
for (YouTubeThumbnailLoader loader : thumbnailViewToLoaderMap.values()) {
loader.release();
}
}