Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
1

Убить поток в адаптере

05.03.2014, 05:04. Просмотров 776. Ответов 2
Метки нет (Все метки)

После Делфи не до конца понимаю работу "сборщика мусора" Явы. Привык "подчищать" за собой сам.

Есть адаптер на основе BaseAdapter
В нем создаю отдельный поток.
В потоке запускаю бесконечный цикл, который по таймеру (заданному в милисекундах интервалу) что-то делает. Ссылка на поток хранится в private переменной адаптера

Вопрос: Убив адаптер, поток тоже убьется?

Код примерно такой:
Java
1
2
3
4
5
6
7
8
9
        Tread1 = new Thread(new Runnable() {
            public void run() {
                runed = true;
                while (runed){
                    // считаем милисекунды... что-то делаем...
                }
            }
        });
        Tread1.start();
Был бы делфи, в деструкторе (OnDestroy) запустил бы что-нибудь вроде Tread1.stop();
Но в яве даже не нашел перекрытие обработки OnDestroy

p.s. Адаптер создаю кучу раз(при каждом открытии активити), поэтому хочу убедиться что поток умирает вместе с ним...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2014, 05:04
Ответы с готовыми решениями:

Как убить поток в CountDownTimer?
Привет, бойцам невидимого фронта! есть эдакий кастомный CountDownTimer.java: package...

NullPointerException в адаптере RecyclerView
Здравствуйте уважаемые форумчане! Столкнулся с такой проблемой, в RecyclerView создаю адаптер для...

Что не так я делаю в адаптере?
доброго, проблема, компелирую запускаю APK программа запускается видно верх название и меню три...

Показывать или скрывать записи в адаптере
Создаю адаптер со всеми записями для RecycleView а потом нажимаю кнопку и меняю условие...

2
Командир зеленых роботов
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 569
05.03.2014, 10:43 2
Цитата Сообщение от Tester64 Посмотреть сообщение
Вопрос: Убив адаптер, поток тоже убьется?
Я поэкспериментировал и пришел к выводу, что не убьётся. Более того, не получится даже убить адаптер. Логика такая: Чтоб убить объект достаточно уничтожить все ссылки на него и подождать пока сборщик мусора его прибьёт. Но для выполняющегося потока такое не пройдет, даже если занулить все ссылки на экземпляр класса Thread, то сборщик мусора его не тронет, вероятно где-то в недрах джава машины присутствует ссылка на него. Ваш класс Thread объявлен как вложенный класс внутри класса адаптера. Экземпляр вложенного класса (Thread ) всегда имеет ссылку на экземпляр класса который является для него "внешним" (ваш адаптер). В результате получается следующее:
1) экземпляр класса Thread никогда не будет выгружен из памяти
2) ваш вложенный класс Thread имеет ссылку на адаптер
3) адаптер не может быть выгружен из памяти так как на него всегда есть ссылка

Я могу ошибаться, поправьте если что не так.
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
05.03.2014, 19:28  [ТС] 3
Понятно... Предполагал подобное, поэтому и задал вопрос. Похоже прийдется делать как в Делфи - создавать свой метод OnDestroy, вызывать его обязательно перед закрытием активити, а в нем убивать поток.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2014, 19:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Изменить цвет текста в адаптере ListView
Здравствуйте, подскажите пожалуйста, как мне изменить по клику на item цвет текста в item...

Назначить идентификаторы кнопкам в адаптере списка
Есть цикл генерации данных для адаптера списка void fillData() { for (int i = 1; i <= 17;...

Загрузки изображений из сети в адаптере GridView
Загружаю картинки в адаптере gridview: //.. ...

Поиск по ListView основанному на кастомном адаптере
Есть кастомный адаптер. ListView сделан на его основе. Данные загружаются из БД. Делаю поиск по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.