LINUX.ORG.RU

Странная утечка памяти ,Android

 ,


0

2

Хочу сделать паралакс эффект, пытаюсь таким кодом

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {

                int pos = view.getFirstVisiblePosition();
                View firstChild = view.getChildAt(pos);
                if (firstChild != null) {
                    topY = firstChild.getTop();
                    TextView textView = (TextView) firstChild.findViewById(R.id.textView);
                    ImageView imageView = (ImageView) firstChild.findViewById(R.id.imageView);
                    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                    params.setMargins(0, -topY / 2, 0, 0);
                    imageView.setLayoutParams(params); // ВОТ ТУТ УТЕЧКА, Коментируем строчку - утечки нет. 
                }
Утечка просто жуткая, по мегабайту за секунду, доходит до 16 мегабайт и приложение падает. В чем тут проблема, или какие есть другие способы реализовать параллакс?

★★★

Версия Android? Как минимально собираешь проект?

ToaDron
()

Проблема скорее всего в том, что ты делаешь setLayoutParams указывая параметром текущий params, из-за чего реализацию setLayoutParams начинает колбасить. Как уже советовали выше, либо просто убери проблемную строчку, а если это не поможет, то попробуй вместо неё поставить requestLayout() или сделать копию params.

Ещё добавлю, что для отлавливания проблем с памятью может оказаться полезной вот эта штука: https://eclipse.org/mat/

runtime ★★★★
()
Последнее исправление: runtime (всего исправлений: 1)
Ответ на: комментарий от kazufukurou

послденяя строчка вообще не имеет смысла, ты кладешь в сеттер тот же самый объект.

params.setMargins(0, -topY / 2, 0, 0); Разве здесь я не меняю объект?

abs ★★★
() автор топика
Ответ на: комментарий от kazufukurou

imageView.getLayoutParams() не создает нового объекта.

Угу, убрал ту строчку что мешало - проблема решилась. Всем спасибо.

abs ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.