У меня есть TabLayout, под каждой вкладкой есть фрагмент (я использую ArrayPagerAdapter). Я заметил, что при многократном переключении с вкладки на другую использование памяти значительно увеличивается. Из моего снимка кучи я вижу, что существует много экземпляров AutoCompleteTextView.Не удается найти утечку, на моем фрагменте андроида код
Поэтому я убежден, что эта проблема может быть здесь:
public class MyFragment {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
final MultiAutoCompleteTextView eInput = (MultiAutoCompleteTextView) v.findViewById(R.id.TextInput);
EditorListener mEditorListener = new EditorListener();
eInput.setOnEditorActionListener(mEditorListener);
eInput.addTextChangedListener(new WhitespaceWatcher());
eInput.setAdapter(mDictionaryAdapter);
eInput.setTokenizer(new SpaceTokenizer());
...
}
...
class EditorListener implements TextView.OnEditorActionListener
{
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
...
MultiAutoCompleteTextView input = (MultiAutoCompleteTextView) textView.findViewById(R.id.TextInput);
...
}
}
...
}
Но я не могу понять, где именно проблема.
Ну, будет один виджет 'AutoCompleteTextView' для каждого фрагмента, который вы загрузили. «ArrayPagerAdapter» работает как «FragmentPagerAdapter», поскольку все страницы хранятся в памяти. – CommonsWare
Да, я знаю об этом. Моя проблема в том, что - из того, что я могу видеть в Instances on Android Studio - каждый раз, когда я переключаю вкладку, сюда приходит новый экземпляр AutoCompleteTextView. Поэтому, если у меня есть 4 вкладки, и я переключаю любую из вкладок 4 раза, я получаю 16 экземпляров AutoCompleteTextView. Любая идея причины? Благодарю. – MoreOver
Вам нужно будет отследить, где вы создаете эти экземпляры. Например, 'onCreateView()' вызывается 4 раза или 16 раз? Если последний, отследите места, где вы создаете экземпляры фрагмента, и посмотрите, вызваны ли они 4 раза или 16 раз. Конечно, возможно, что в «ArrayPagerAdapter» есть ошибка: например, я никогда не использовал его с «appcompat-v7», и, насколько я знаю, эти два будут плохо взаимодействовать по какой-то неожиданной причине. – CommonsWare