RecyclerView использует так много памяти, пока OOMAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 RecyclerView использует так много памяти, пока OOM

Сообщение Anonymous »


«Память» быстро увеличивается после открытия фрагмента, содержащего RecyclerView. При прокрутке вверх и вниз несколько раз «память» продолжает расти, а затем отображаются OOM и принудительное закрытие.
Изображение


Ниже приведен код моего адаптера:

Я просто использую один RecyclerView для всей страницы и вставляю GridView в первый элемент;
публичный класс CategoryPagerItemAdapter расширяет RecyclerView.Adapter { //热门分类 общедоступный статический окончательный int VIEW_TYPE_HOT_SUB_CATE = 1; //баннер+商品横滑推荐 общедоступный статический окончательный int VIEW_TYPE_PROMOTION_LIST = 2; общедоступный статический окончательный int VIEW_TYPE_PROMOTION_LIST_LABEL = 3; //商品集合 общедоступный статический окончательный int VIEW_TYPE_GOODS_LIST = 4; //商品集合标签 общедоступный статический окончательный int VIEW_TYPE_GOODS_LIST_LABEL = 5; //加载更多 общедоступный статический окончательный int VIEW_TYPE_GOODS_LIST_MORE = 6; общедоступный статический финал int COUNT_HOT_SUB_CATE = 1; общедоступный статический окончательный int COUNT_HOT_GOODS_LIST_LABEL = 1; общедоступный статический окончательный int COUNT_HOT_GOODS_LIST_MORE = 1; частная строка mTagId;//TabLayout的title对应的tagid частная строка mTitleName;//TabLayout的title对应的name Private int mIndex = -1;//ViewPager的index Private int mLevel = 1;//级别分类 частный контекст mContext; //相关的баннер+横滑商品 частный ArrayList mRelatedTagListEntityList; //热门分类 частный ArrayList mHotSubCategoryListEntityList; //商品列表 частный ArrayList mGoodListEntityList; частный int mRelatedTagSize, mGoodsListSize; частный OnGoodsItemClickListener mOnGoodsItemClickListener; public CategoryPagerItemAdapter (Контекст контекста, String tagId, String titleName, int index) { mTagId = идентификатор тега; mTitleName = titleName; мИндекс = индекс; мКонтекст = контекст; } public void resetData(ArrayList hotSubCategoryListEntityList, ArrayList linkedTagListEntityList, ArrayListgoodListEntityList, уровень int) { mHotSubCategoryListEntityList = hotSubCategoryListEntityList; mRelatedTagListEntityList = linkedTagListEntityList; mGoodListEntityList = GoodListEntityList; mRelatedTagSize = mRelatedTagListEntityList == null? 0: mRelatedTagListEntityList.size(); mGoodsListSize = mGoodListEntityList == null? 0: mGoodListEntityList.size(); мЛевел = уровень; уведомитьDataSetChanged(); } @Override public RecyclerView.ViewHolder onCreateViewHolder (родитель ViewGroup, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(mContext); // 头部的十个分类 если (viewType == VIEW_TYPE_HOT_SUB_CATE) { вернуть новый HotSubCateViewHolder(layoutInflater.inflate(R.layout.category_classify_item_hot_sub_cate, родительский, false)); } else if (viewType == VIEW_TYPE_PROMOTION_LIST) {//banner+商品横滑推荐 вернуть новый PromotionViewHolder(layoutInflater.inflate(R.layout.category_classify_item_related, родительский, false)); } else if (viewType == VIEW_TYPE_GOODS_LIST) {//商品列表 вернуть новый GoodListViewHolder(layoutInflater.inflate(R.layout.category_classify_item_goods_list, родительский, false)); } иначе, если (viewType == VIEW_TYPE_GOODS_LIST_LABEL) { вернуть новый GoodListLabelViewHolder(layoutInflater.inflate(R.layout.category_classify_item_goods_list_label, родительский, false)); } else if (viewType == VIEW_TYPE_GOODS_LIST_MORE) {//更多 вернуть новый MoreGoodsListViewHolder(layoutInflater.inflate(R.layout.category_classify_item_more, родительский, false)); } вернуть ноль; } @Override public void onBindViewHolder(RecyclerView.ViewHolder vh, окончательная позиция int) { переключатель (vh.getItemViewType()) { //热门分类 случай VIEW_TYPE_HOT_SUB_CATE: окончательный HotSubCateViewHolder hotSubCateHolder = (HotSubCateViewHolder) vh; int HorizontalSpacing = (UJiPin.SCREEN_WIDTH - UDensity.dip2px(mContext, 16) * 2 - UDensity.dip2px(mContext, 50) * 5)/4; hotSubCateHolder.mGridview.setHorizontalSpacing(horizontalSpacing); hotSubCateHolder.mGridview.setVerticalSpacing(UDensity.dip2px(mContext, 20)); окончательный CategoryHotSubCateAdapter CategoryHotSubCateAdapter = новый CategoryHotSubCateAdapter (mContext, mHotSubCategoryListEntityList); hotSubCateHolder.mGridview.setAdapter(categoryHotSubCateAdapter); hotSubCateHolder.mGridview.setOnItemClickListener (новый AdaptorView.OnItemClickListener () { @Override public void onItemClick(AdapterView родительский элемент, представление просмотра, int pos, длинный идентификатор) { int hotSubViewType = категорияHotSubCateAdapter.getItemViewType(pos); CategoryList.HotSubCategoryListEntity hotSubCategoryListEntity = mHotSubCategoryListEntityList.get(pos); if (hotSubViewType == CategoryHotSubCateAdapter.VIEW_TYPE_HOT_SUB_CATE) {//热门分类 JumpUtils.JumpClassifyList((BaseActivity) mContext, hotSubCategoryListEntity.getLevel(), hotSubCategoryListEntity.getTag_id(), hotSubCategoryListEntity.getName()); UJPTrack.getInstance().setTrack((BaseActivity) mContext, UJPTrack.PAGE_CLASS_ + UString.urlEncode(hotSubCategoryListEntity.getName()), "класс-1-" + UString.urlEncode(hotSubCategoryListEntity.getName())); } else if (hotSubViewType == CategoryHotSubCateAdapter.VIEW_TYPE_HOT_SUB_CATE_MORE) {//点击подробнее Намерение намерение = новое намерение (mContext, CategoryPagerMoreActivity.class); Intent.putExtra(CategoryPagerMoreActivity.EXTRA_STRING_CATEGORY_NAME, mTitleName); Intent.putExtra(CategoryPagerMoreActivity.EXTRA_INT_CATEGORY_INDEX, mIndex); Intent.putExtra(CategoryPagerMoreActivity.EXTRA_STRING_CATEGORY_TAG_ID, mTagId); mContext.startActivity(намерение); UJPTrack.getInstance().setTrack((BaseActivity) mContext, UJPTrack.PAGE_CLASS_ + UString.urlEncode(mTitleName), «класс-1-больше»); } } }); перерыв; случай VIEW_TYPE_PROMOTION_LIST://баннер+横滑 PromotionViewHolder PromotionViewHolder = (PromotionViewHolder) vh; окончательное int продвижениеPosition = позиция - COUNT_HOT_SUB_CATE; // представление recyclerview в режиме реального времени, если вы хотите использовать else, в противном случае GridLayoutManager.LayoutParams продвижениеLP = (GridLayoutManager.LayoutParams) продвижениеViewHolder.mContainer.getLayoutParams(); if (promotionPosition == 0) {//如果是第一个,则显示“相关推荐“ продвижениеViewHolder.mLabel.setVisibility(View.VISIBLE); продвижениеLP.setMargins(-UDensity.dip2px(mContext, 5), UDensity.dip2px(mContext, 16), -UDensity.dip2px(mContext, 5), 0); } еще { продвижениеViewHolder.mLabel.setVisibility(View.GONE); продвижениеLP.setMargins(-UDensity.dip2px(mContext, 5), UDensity.dip2px(mContext, 4), -UDensity.dip2px(mContext, 5), 0); } продвижениеViewHolder.mContainer.setLayoutParams(promotionLP); окончательный CategoryList.RelatedTagListEntity linkedTagListEntity = mRelatedTagListEntityList.get(promotionPosition); FrescoImageLoader.getInstance().load(promotionViewHolder.mCover, linkedTagListEntity.getCover()); //点击баннер продвижениеViewHolder.mCover.setOnClickListener(new View.OnClickListener() { @Override общественная недействительность onClick (Просмотр v) { JumpUtils.JumpActivityTopic((BaseActivity) mContext, linkedTagListEntity.getName(), связанныйTagListEntity.getTag_id(), ноль, продвижениеПозиция); UJPTrack.getInstance().setTrack((BaseActivity) mContext, UJPTrack.PAGE_LABEL_ + UString.urlEncode(relatedTagListEntity.getName()), "класс-2-" + CovertInt(promotionPosition + 1)); } }); окончательный адаптер CategoryChoiceTagAdapter = новый CategoryChoiceTagAdapter(mContext); //点击横滑商品 адаптер.setOnItemClickListener(новый CategoryChoiceTagAdapter.OnItemClickListener() { @Override public void onTag4ItemClick(final CategoryList.GoodListEntity GoodListEntity, int Position, View View) { Jumper.newJumper().putString(GoodsDetailActivity.EXTRA_STRING_GOODID, GoodListEntity.getGoods_id() + "") .putString(GoodsDetailActivity.EXTRA_STRING_SOURCENAME, "分类") .putString(GoodsDetailActivity.EXTRA_STRING_SOURCEID, "活动横滑") .jump((BaseActivity) mContext, GoodsDetailActivity.class); UJPTrack.getInstance().setTrack((BaseActivity) mContext, UJPTrack.PAGE_GOOD + GoodListEntity.getGoods_id(), "класс-2-" + CovertInt(promotionPosition + 1)); } }); продвижениеViewHolder.mSlideMoreRecycleView.setAdapter(адаптер); адаптер.setDataRefresh(связанныйTagListEntity.getGoods_list()); //横滑 продвижениеViewHolder.mSlideMoreRecycleView.setOnSlideTwiceLisner(new SlideMoreRecycleView.SlideTwiceLisner() { @Override public void onSliding (RecyclerView recyclerView) { JumpUtils.JumpActivityTopic((BaseActivity) mContext, linkedTagListEntity.getName(), связанныйTagListEntity.getTag_id(), "", продвижениеPosition); } }); перерыв; чехол VIEW_TYPE_GOODS_LIST_LABEL://этикетка 商品列表的 перерыв; чехол VIEW_TYPE_GOODS_LIST://商品列表 intgoodsListPosition = позиция - COUNT_HOT_SUB_CATE - mRelatedTagSize - COUNT_HOT_GOODS_LIST_LABEL; окончательный CategoryList.GoodListEntity GoodListEntity = mGoodListEntityList.get(goodsListPosition); окончательный GoodListViewHolder GoodListViewHolder = (GoodListViewHolder) vh; ViewCompat.setTransitionName(goodsListHolder.ivCover, mContext.getString(R.string.transition_name) + позиция); goodsListHolder.rootView.setOnClickListener(new View.OnClickListener() { @Override общественная недействительность onClick (Просмотр v) { если (mOnGoodsItemClickListener! = ноль) { mOnGoodsItemClickListener.onItemClick(goodsListHolder.rootView, GoodListEntity, позиция, GoodListEntity.getThumbnail()); } } }); товарыListHolder.tv_goods_selling_point.setText(goodListEntity.getSelling_point()); if (!TextUtils.isEmpty(goodListEntity.getThumbnail())) FrescoImageLoader.getInstance().load(goodsListHolder.ivCover, GoodListEntity.getThumbnail()); if (!TextUtils.isEmpty(goodListEntity.getMark())) { товарыListHolder.ivGroupLogo.setVisibility(View.VISIBLE); FrescoImageLoader.getInstance().load(goodsListHolder.ivGroupLogo, GoodListEntity.getMark()); } еще { товарыListHolder.ivGroupLogo.setVisibility(View.GONE); } товарыListHolder.tvDescription.setText(goodListEntity.getGoods_name()); if (!TextUtils.isEmpty(goodListEntity.getGoods_price())) товарыListHolder.tvPrice.setText(String.format(mContext.getString(R.string.rmb), GoodListEntity.getGoods_price())); //售罄 если (goodListEntity.getProduct_stock_total()
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»