утечка памяти - PullRequest
       32

утечка памяти

0 голосов
/ 31 октября 2018

в приведенном ниже коде, может ли быть какая-либо проблема с утечкой памяти?. Есть ли риск для активности? 1001 *

adapter = new BaseAdapter() {
        @Override
        public int getCount() {
            return searchList == null ? 0 : searchList.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if(convertView == null) {
                convertView = new TextView(getApplicationContext());
            }
            ((TextView) convertView).setText(searchList.get(position));
            return null;
        }
    };
    myListView.setAdapter(adapter);

1 Ответ

0 голосов
/ 31 октября 2018

Не думаю, что у вас есть проблема с утечкой. Но не используйте ApplicationContext для этого TextView, вы должны использовать контекст, в котором будет отображаться представление.

Два решения, если вы хотите быть супер экстра уверен, хотя.

  1. Использование ArrayAdapter

    Если вы используете ArrayAdapter, он позаботится обо всем этом для вас. Это встроенный класс, созданный Google для использования с простыми структурами списков. Тогда вам не нужно будет использовать контекст приложения для создания своего представления (что не следует делать, вы должны использовать текущее действие в качестве контекста).

    https://developer.android.com/reference/android/widget/ArrayAdapter

    Возможно, вы захотите использовать этот конструктор: https://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter(android.content.Context,%20int,%20T[])

    1. Установите для вашего адаптера значение null в методе onDestroy ().

      Если в OnDestroy вы установите для адаптера значение null, он будет GCed, а не блокировать GC Activity. Просто сохраните частную ссылку на ваш адаптер в вашем классе. Вы можете сделать это вместе с номером один, ничего не повредит.

Я не думаю, что что-то из этого действительно необходимо, такой код является довольно распространенной практикой.

...