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

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

Войти
Регистрация
Восстановить пароль
 
 
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138
#1

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

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

Всем привет.

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

Запуск activity из service - Программирование Android
Добрый вечер! Как правильно запускать активность из сервиса? Метод startActivity(new Intent(this,MyActivity.class)); не работает,...

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

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

Утечка памяти - Программирование Android
Работаю в Android Studio Подскажите как определить утекает ли память при работе с программой или нет. А то знакомые говорят после какого то...

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

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

15
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
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
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
13.12.2016, 13:40 #4
Delphian, зачем он вам?
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
13.12.2016, 14:45 #9
и теперь мы возвращаемся к первоначальному вопросу - откуда в сервисе ссылка на активити?
код есть какой-то на что смотреть,
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
13.12.2016, 15:30 #12
приехали, снова теоретики атакуют
нет кода - нет утечек
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
13.12.2016, 19:06 #15
неужели непонятно что контекст далеко не всегда == активити
в сервисе можно получить контекст приложения, он один и никаких утечек не будет

если хочется передать сервису ссылку на активити - самое время все вытереть и сеть думать, что не так в архитектуре приложения
1
13.12.2016, 19:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 19:06
Привет! Вот еще темы с ответами:

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

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

Утечка памяти при использовании хандлера - Программирование Android
new Handler().postDelayed(new Runnable() { @Override public void run() { textView.setText("" + 666); } },...

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


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

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

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