我用了viewholder,grideview加载本地图片,还用的glide加载的,ondestroy也释放了glide缓存,可是内存就是不降,何解啊

扬帆!起航! 2018-01-09 09:12:52
我用了viewholder,grideview加载本地图片,还用的glide加载的,ondestroy也释放了glide缓存,可是内存就是不降,何解啊
...全文
527 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
扬帆!起航! 2018-01-10
  • 打赏
  • 举报
回复
引用 8 楼 jklwan 的回复:
[quote=引用 7 楼 qwildwolf 的回复:]内存降低了10M,但是第二次进来有的图片成黑的了,怎么解
这两句代码是清理所有内存缓存和磁盘缓存,重新加载应该就行了。[/quote]重新加载时啥意思,每次进来都是重新走adapter加载一遍的呀
扬帆!起航! 2018-01-10
  • 打赏
  • 举报
回复
引用 8 楼 jklwan 的回复:
[quote=引用 7 楼 qwildwolf 的回复:]内存降低了10M,但是第二次进来有的图片成黑的了,怎么解
这两句代码是清理所有内存缓存和磁盘缓存,重新加载应该就行了。[/quote]我设置了glide不进行缓存了,就可以了,虽然方便,也有很多坑啊glide
扬帆!起航! 2018-01-09
  • 打赏
  • 举报
回复
public UploadingAdapter(Context context, List<Upload> list, UploadingActivity activity, TextView tvNoRecord, GridView grid, RelativeLayout height)
    {
        super();
        this.mContext = context;
        this.mListData = list;
        this.mTvNoRecord = tvNoRecord;
        this.mGridView = grid;
        this.mMenuHeight = height;

        if(mListData.size() == 0)
        {
            mTvNoRecord.setVisibility(View.VISIBLE);
        }
        else
        {
            mTvNoRecord.setVisibility(View.INVISIBLE);
        }

        this.mActivity = activity;
        mLoader = new GlideLoader();
    }

    @Override
    public int getCount()
    {
        return mListData.size();
    }

    @Override
    public Object getItem(int position)
    {
        return mListData.get(position);
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

    @SuppressWarnings("deprecation")
    @SuppressLint("NewApi")
    @Override
    public View getView(final int position, View convertView, ViewGroup parent)
    {
        if(convertView == null)
        {
            mVholder1 = new ViewHolder1();

            convertView = View.inflate(mContext, R.layout.item_uploading, null);

            mVholder1.mProgressBar = (ProgressBar) convertView.findViewById(R.id.progress_transfer);
            mVholder1.mIvThumbnail = (ImageView) convertView.findViewById(R.id.iv_thumbnail);
//            mVholder1.mIvComment = (ImageView) convertView.findViewById(R.id.iv_comment);
            mVholder1.mIvTurnOn = (ImageView) convertView.findViewById(R.id.iv_turn_on);
            mVholder1.mIvTurnOn.setVisibility(View.INVISIBLE);

            convertView.setTag(mVholder1);
        }
        else
        {
            mVholder1 = (ViewHolder1) convertView.getTag();
        }

        WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        int height = display.getHeight();

        // outRect.top是状态栏高度
        Rect outRect = new Rect();
        mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);

        int spacingNum = 0;
        switch(mListData.size())
        {
            case 1:
                break;
            case 2:
            case 3:
            case 4:
                spacingNum = 1;
                break;
            case 5:
            case 6:
                spacingNum = 2;
                break;
            default:
                break;
        }

        realHeight = height - mMenuHeight.getHeight() - mGridView.getVerticalSpacing() * spacingNum - outRect.top;
        paramses = (RelativeLayout.LayoutParams) mVholder1.mIvThumbnail.getLayoutParams();
        
        switch(mListData.size())
        {
            case 1:
                mGridView.setNumColumns(1);
                paramses.width = LayoutParams.WRAP_CONTENT;
                paramses.height = realHeight;
                mVholder1.mIvThumbnail.setLayoutParams(paramses);
                break;
            case 2:
                mGridView.setNumColumns(1);
                paramses.width = LayoutParams.WRAP_CONTENT;
                paramses.height = realHeight / 2;
                mVholder1.mIvThumbnail.setLayoutParams(paramses);
                break;
            case 3:
            case 4:
                mGridView.setNumColumns(2);
                paramses.width = LayoutParams.WRAP_CONTENT;
                paramses.height = realHeight / 2;
                mVholder1.mIvThumbnail.setLayoutParams(paramses);
                break;
            case 5:
            case 6:
                mGridView.setNumColumns(2);
                paramses.width = LayoutParams.WRAP_CONTENT;
                paramses.height = realHeight / 3;
                mVholder1.mIvThumbnail.setLayoutParams(paramses);
                break;
            default:
                break;
        }

        final Upload model = mListData.get(position);

        // 设置缩略图
        if(GlobalConfig.sDrawingUrl.get(position) != null)
        {
            mLoader.displayImage(mContext, GlobalConfig.sDrawingUrl.get(position), mVholder1.mIvThumbnail);
        }
        else
        {
            mLoader.displayImage(mContext, model.getUrl(), mVholder1.mIvThumbnail);
        }

        int progress = 0;

        mVholder1.mProgressBar.setVisibility(View.VISIBLE);

//        if(model.getmLevel() != 100)
//        {
//            mVholder1.mIvComment.setVisibility(View.VISIBLE);
//            mVholder1.mIvComment.setImageResource(mLevel[model.getmLevel()]);
//        }
//        else
//        {
//            mVholder1.mIvComment.setVisibility(View.INVISIBLE);
//        }

        if(model.getComplete() == 1)
        {
            mVholder1.mProgressBar.setVisibility(View.INVISIBLE);
            if(model.getTypeString().equals(GlobalConfig.UploadFileType.VIDEO))
            {
                mVholder1.mIvTurnOn.setVisibility(View.VISIBLE);
            }
        }
        else
        {
            mVholder1.mProgressBar.setVisibility(View.VISIBLE);
            mVholder1.mIvTurnOn.setVisibility(View.INVISIBLE);
        }

        if(mActivity.mUploadWidget.containsKey(model.getName()))
        {
            progress = mActivity.mUploadWidget.get(model.getName());

            mVholder1.mProgressBar.setProgress(progress);
        }
        else
        {
            mVholder1.mProgressBar.setProgress(0);
        }

        mVholder1.mProgressBar.setTag(model.getName());

        mVholder1.mIvTurnOn.setTag(mVholder1.mProgressBar);

        mVholder1.mIvTurnOn.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String message = new JsonUtils<DrawPicModel>().parse(new DrawPicModel(207, model.getName(), position));
                ServiceUtils.publish(message, GlobalConfig.MQTTServer.WHITEBOARD_TOPIC);
            }
        });

        return convertView;
    }

    @Override
    public void notifyDataSetChanged()
    {
        super.notifyDataSetChanged();
    }

    class ViewHolder1
    {
        ProgressBar mProgressBar;
        ImageView mIvThumbnail;
        ImageView mIvTurnOn;
//        ImageView mIvComment;
    }

    public void setList(List<Upload> mList)
    {
        this.mListData = mList;
        notifyDataSetChanged();
    }
扬帆!起航! 2018-01-09
  • 打赏
  • 举报
回复
activity的ondestroy
protected void onDestroy()
    {
        if(EventBus.getDefault().isRegistered(this))
        {
            EventBus.getDefault().unregister(this);
        }
        
        Glide.get(MyApplication.getInstance()).clearMemory();

        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                Glide.get(MyApplication.getInstance()).clearDiskCache();
            }
        }).start();

        setContentView(R.layout.activity_about);

        super.onDestroy();
    }
jklwan 2018-01-09
  • 打赏
  • 举报
回复
贴点儿关键代码
扬帆!起航! 2018-01-09
  • 打赏
  • 举报
回复
补充:activity销毁之后仍然占用内存,求解,用了网上其他人说的ondestroy的时候setcontentview弄个空layout也不行
jklwan 2018-01-09
  • 打赏
  • 举报
回复
引用 7 楼 qwildwolf 的回复:
内存降低了10M,但是第二次进来有的图片成黑的了,怎么解
这两句代码是清理所有内存缓存和磁盘缓存,重新加载应该就行了。
扬帆!起航! 2018-01-09
  • 打赏
  • 举报
回复
引用 5 楼 jklwan 的回复:
用Glide.get(this),你用了application,就和app的生命周期挂钩了,代码放到super.onDestroy();之后。加载图片的Glide也要用Glide.with(activity)初始化,不要用application。
内存降低了10M,但是第二次进来有的图片成黑的了,怎么解
扬帆!起航! 2018-01-09
  • 打赏
  • 举报
回复
引用 5 楼 jklwan 的回复:
用Glide.get(this),你用了application,就和app的生命周期挂钩了,代码放到super.onDestroy();之后。加载图片的Glide也要用Glide.with(activity)初始化,不要用application。
小白尴尬问下,在super之前和之后有啥区别呀大神?
jklwan 2018-01-09
  • 打赏
  • 举报
回复
用Glide.get(this),你用了application,就和app的生命周期挂钩了,代码放到super.onDestroy();之后。加载图片的Glide也要用Glide.with(activity)初始化,不要用application。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧