Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
#1

Activity + Service - утечка памяти? - Программирование Android

13.12.2016, 12:18. Просмотров 339. Ответов 15
Метки нет (Все метки)

Всем привет.

Подскажите, пожалуйста, когда я запускаю сервис из активити (startService) и мой сервис работает достаточно долго, так что активити уже нет, а сервис ещё работает, при этом никаких дополнительных потоков в сервисе я не запускаю. Из-за этого происходит утечка памяти, так как насколько я понимаю сервис удерживает ссылку на предыдущую активити (значит что старая не удаляется полностью?) , но пр этом создаётся новая активити, пока работает сервис. Можно ли подробнее узнать как именно происходит утечка памяти и при каких обстоятельствах ссылка на старую активити не будет храниться, зависит ли это от передачи контекста? Может быть где-то можно подробно об этом почитать, а не поверхностно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2016, 12:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Activity + Service - утечка памяти? (Программирование Android):

Запуск activity из service
Добрый вечер! Как правильно запускать активность из сервиса? Метод...

Передача данных из activity в service
Здравствуйте, как можно организовать передачу данных из activity в сервис, если...

Обработка нажатий клавиш громкости непосредственно Service (Activity уже закрыто)
Уважаемые форумчане! Буду благодарен за любую помощь. Написал добрую...

Утечка памяти
Разработал программу, получилась достаточно большая, использует сторонние...

Утечка памяти
Работаю в Android Studio Подскажите как определить утекает ли память при работе...

Утечка памяти в Spiner
Здравствуйте. Создал новый проект в Layout добавил выпадающий список в ресурсы...

15
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
13.12.2016, 12:41 #2
Delphian, если в вашем сервисе есть ссылка на активити, то, наверное, активити не может полноценно умереть. вывод - не храните ссылку на активити в сервисе.
0
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
13.12.2016, 13:00  [ТС] #3
vxg, а если ссылки нет, но есть контекст этой активити?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
13.12.2016, 13:40 #4
Delphian, зачем он вам?
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
13.12.2016, 14:30 #5
Цитата Сообщение от Delphian Посмотреть сообщение
Из-за этого происходит утечка памяти
откуда информация?
0
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
13.12.2016, 14:33  [ТС] #6
vxg, бывает что необходимо, это может быть связано с архитектурой, хотя конечно, у сервиса свой контекст поэтому 95% задач контекста активити не требуют. Однако, не совсем ясно, удалится ли прошлая активити полностью, если не будет ни контекста ни ссылки или всё же будут какие-то объекты висеть в памяти. В документации этот вопрос крайне поверхностно описывается

Добавлено через 2 минуты
Паблито, инфы на этот счёт видел много, да хотя бы вот это взять http://www.slideshare.net/andersgoransson/efficient-android-threading слайд 44 (https://www.youtube.com/watch?v=xQoc1nSvvMw)
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
13.12.2016, 14:35 #7
я спрашиваю откуда информация и уверенность что происходит утечка, не нужно мне ссылки на видео кидать
0
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
13.12.2016, 14:40  [ТС] #8
Паблито, так я сам не проверял, поэтому уверенность, исключительно, основана на утверждениях различных экспертов Старая активити остаётся если есть ссылка с работающего сервиса, значит GC удалить не может
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
13.12.2016, 14:45 #9
и теперь мы возвращаемся к первоначальному вопросу - откуда в сервисе ссылка на активити?
код есть какой-то на что смотреть,
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
13.12.2016, 15:11 #10
Цитата Сообщение от Delphian Посмотреть сообщение
бывает что необходимо
ни разу не бывает
0
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
13.12.2016, 15:22  [ТС] #11
Паблито, кода у меня нет, просто после изучения данного вопроса внимательнее возник вопрос. Если не создавать ссылку и не брать контекст, будет ли удаляться старая активити подчистую и какие проблемы могут быть при пересоздании активити при условии что сервис работает долго в UI потоке. Например, Webview требует UI потока, и может выполнять длительные операции, связанные с JavaScript
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
13.12.2016, 15:30 #12
приехали, снова теоретики атакуют
нет кода - нет утечек
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
13.12.2016, 15:44 #13
Delphian, не нужно хранить ссылки на активити. если вы будете их хранить будут утечки.

Добавлено через 41 секунду
...про проблемы при пересоздании - я не понял
1
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
13.12.2016, 19:00  [ТС] #14
vxg, просто хотел разобрать механизм подробно, так как детальной инфы мало, да и обсудить это кроме как на форуме негде, но видимо, я сам лезу в дебри и усложняю, когда можно просто не использовать контекст и не иметь ссылку на активити и забыть об утечках
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
13.12.2016, 19:06 #15
неужели непонятно что контекст далеко не всегда == активити
в сервисе можно получить контекст приложения, он один и никаких утечек не будет

если хочется передать сервису ссылку на активити - самое время все вытереть и сеть думать, что не так в архитектуре приложения
1
demixdn
288 / 235 / 70
Регистрация: 31.10.2016
Сообщений: 563
13.12.2016, 19:21 #16
Delphian, просто запомните пару вещей: нигде не храните статические view, с осторожностью храните ссылки на context, и никогда не сохраняйте ссылку на activity.
И изучите WeakReference.
2
13.12.2016, 19:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 19:21
Привет! Вот еще темы с решениями:

Android WebView утечка памяти
При добавлении поддержки JavaScript setJavaScriptEnabled(true), когда перехожу...

FragmentActivity -> DialogFragment (утечка памяти)
Всем привет! Обнаружил у себя такой баг: при повороте экрана - каждый раз...

Утечка памяти при использовании Handler
Добрый день, многоуважаемые форумчане :). Прошу помощи в решении проблемы. ...

Утечка памяти в RecyclerView onBindViewHolder setTag?
Есть RecyclerView и в onBindViewHolder я делаю ...


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

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

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