58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
1 | |
Коректное завершение программы25.12.2013, 13:59. Показов 2477. Ответов 12
Метки нет (Все метки)
Есть главное activity, которое запускает сервис. Сервис выполняет длительную операцию. При нажатии Back приложение сворачивается, сервис работает - так и надо. При закрытии приложения через TaskManager закрывается и сервис и приложение - норм. Но если удерживаем клавишу "Домик" и оттуда закрываем свернутое приложение - выскакивает окно ошибки. Подозреваю что сервис проверяет связь с активити и выдает ошибку. Как решить проблему?
При нажатии Back вызывается onDestroy(), что тогда вызывается при закрытии через ДОМИК?
0
|
25.12.2013, 13:59 | |
Ответы с готовыми решениями:
12
Поиск и завершение всех Service программы IntelliTrace остается в процессах после закрытия программы. Правильное завершение программы? завершение программы Завершение программы |
Командир зеленых роботов
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 576
|
|
25.12.2013, 15:27 | 2 |
Давай посмотрим на стектрейс для начала
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
25.12.2013, 22:51 [ТС] | 3 |
0
|
Командир зеленых роботов
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 576
|
|
25.12.2013, 23:33 | 4 |
Просто подключи устройство к компьютеру, запусти Eclipse и воспроизведи сценарий когда возникает окно ошибки. Потом посмотри в LogCat и там будет стек вызовов.
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
||||||
26.12.2013, 19:47 [ТС] | 5 | |||||
Вот что получил
0
|
Командир зеленых роботов
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 576
|
|
26.12.2013, 19:59 | 6 |
Случился NullPointerException
Показывай код теперь :-)
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
||||||
27.12.2013, 12:18 [ТС] | 7 | |||||
Я так понял здесь зарыта собака. Из главного активити запускается сервис. Метод OnStartCommand сервиса - здесь происходит получение данных из главного активити.
Ситуация такая. Когда я нажимаю клавишу Back вызывается метод onDestroy() главного активити, а сервис продолжает жить своей жизнью - мне так и надо. Когда я сворачиваю приложение кнопкой Home - вызывается метод onStop() главного активити - сервис работает - так и надо. Когда я удерживаю клавишу Home - вызываю список запущенных приложений и удаляю его оттуда, перетянув в сторону - вызывается метод onDestroy() главного активити и ---- ВНИМИНИЕ --- вызывается метод onCreate сервиса, потом onStartCommand()? где у меня принимаються данные из главного активити, которого уже нет - соответственно происходит ошыбка. ПОЧЕМУ так происходит при закрытии программы как я описал и что надо предпринять? Добавлено через 15 часов 7 минут Есть предложения?
0
|
349 / 240 / 34
Регистрация: 16.01.2010
Сообщений: 766
|
|
27.12.2013, 14:21 | 8 |
Как это вообще происходит? После onDestroy() ничего уже никуда не передаться. Ибо нет уже никаких данных.
Они до этого, должны быть как сохранены, или переданы.
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
27.12.2013, 14:41 [ТС] | 9 |
Я же подробно все описал. При закрытии свернутого приложения происходит, не могу понять почему, повторный вызов методов onCreate() и onStartCommand() сервиса, последний и вызывает ошибку. Для того чтобы устранить ошибку надо придумать способ, чтобы при закрытии свернутого приложения удалялся сервис.
0
|
349 / 240 / 34
Регистрация: 16.01.2010
Сообщений: 766
|
|
27.12.2013, 15:08 | 10 |
Может и подробно, но как то не понятно onCreate() не может быть повторно вызван (без пересоздания).
Кроме того, нужно помнить, что методы onStop() и onDestroy() вообще могут быть не вызваны, никогда. P.S. Вы не можете управлять этим методами, они "отданы на откуп" системе. Другими словами, когда и что вызывать не вам решать.
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
27.12.2013, 17:27 [ТС] | 11 |
Я просто описал, что у меня за чем вызывается. А почему оно вызывается я хз.
Добавлено через 29 минут я только описал что происходит на самом деле
0
|
349 / 240 / 34
Регистрация: 16.01.2010
Сообщений: 766
|
|
27.12.2013, 17:49 | 12 |
Не факт. Вызовами этих методов невозможно управлять, и не известно что вызывается, когда вы нажимаете (Back или ДОМИК). Можно сказать, что точно вызывается onPause(). А все остальное - непредсказуемо.
Можете ради интереса, в каждом методе (onDestroy, onStop() и прочих) вызвать Log, и посмотреть какие методы будут вызваны. Проделать это неоднократно, для наглядности.
0
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
||||||
28.12.2013, 13:40 [ТС] | 13 | |||||
Я так и сделал. прописал логи и смотрел что вызывается. если нажать back вызывается on stop и onDestroy главного активити, сервис продолжает работать. Если после этого удерживают home , программа есть в списке, и я её закрывают - никакой метод из активити не запускается, но запускается onCreate и onStartCommand сервиса, что провоцирует ошибку.
Добавлено через 2 часа 58 минут Еще раз подробнее опишу логи, может кто-то что-то сообразит
пропустил после 28 строки onResume Main - но это не важно Добавлено через 15 часов 55 минут Кто сталкивался с подобным, есть предложения.
0
|
28.12.2013, 13:40 | |
28.12.2013, 13:40 | |
Помогаю со студенческими работами здесь
13
БД. Завершение программы Завершение программы Завершение программы 1/0 Завершение программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |