Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

Я могу ошибаться, поправьте если что не так.
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
05.03.2014, 19:28  [ТС] #3
Понятно... Предполагал подобное, поэтому и задал вопрос. Похоже прийдется делать как в Делфи - создавать свой метод OnDestroy, вызывать его обязательно перед закрытием активити, а в нем убивать поток.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2014, 19:28
Привет! Вот еще темы с ответами:

Не обновлять айтемы в адаптере когда скроллим список - Программирование 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()) и в итоге получаю при выходе из приложения захожу...


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

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

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