Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Убить поток в адаптере - Программирование Android

05.03.2014, 05:04. Просмотров 583. Ответов 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. Адаптер создаю кучу раз(при каждом открытии активити), поэтому хочу убедиться что поток умирает вместе с ним...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2014, 05:04     Убить поток в адаптере
Посмотрите здесь:

Как убить поток в CountDownTimer? - Программирование Android
Привет, бойцам невидимого фронта! есть эдакий кастомный CountDownTimer.java: package com.dis.medprog; /* * Copyright (C)...

Загрузки изображений из сети в адаптере GridView - Программирование Android
Загружаю картинки в адаптере gridview: //.. viewHolder.name.setText(arrayList.get(position).get("name")); ...

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

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

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

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

Filterable не понимаю как в адаптере взять String значение по позиции ? - Программирование Android
fragment: inputSearch.addTextChangedListener(new TextWatcher() { @Override public void...

Как брать путь картинки в sqlite, и сетить на айтем в адаптере? - Программирование Android
Добрый день! подскажите пожалуйста как это делается? в getView() адаптера так: titleI =...

Полностью убить приложение - Программирование Android
Я в методе onBackPressed прописал Android. is. killProcess(android.os.Process.myPid()) и в итоге получаю при выходе из приложения захожу...

Handler, поток не останавливается - Программирование Android
Добрый вечер. Не могу остановить таймер, при переходе на другую Activity. Возможно ли это вообще? Code: mport...


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

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

Я могу ошибаться, поправьте если что не так.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
05.03.2014, 19:28  [ТС]     Убить поток в адаптере #3
Понятно... Предполагал подобное, поэтому и задал вопрос. Похоже прийдется делать как в Делфи - создавать свой метод OnDestroy, вызывать его обязательно перед закрытием активити, а в нем убивать поток.
Yandex
Объявления
05.03.2014, 19:28     Убить поток в адаптере
Ответ Создать тему
Опции темы

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