Лезет противный Destroy

Интерфейс, диалоги, темы, стили, меню
Ответить
Casper
Сообщения: 5
Зарегистрирован: 27 мар 2014, 12:43

Лезет противный Destroy

Сообщение Casper » 27 мар 2014, 12:48

Привет. Вот и меня сюда привело. Начитался уроков.
Значит проблема такая.
1. Делаю программку.
2. Все есть, код, активити, класс, блютуз, все работает.

Но все это работает до тех пор, пока телефон не перейдет в режим ожидания (погаснет экран или я нажму кнопочку питания).
В это время вызывается зачем-то destroy. Ладно бы он просто паузился, но он почему-то уничтожается, а блутузный класс остается висеть в подключенном состоянии. Ну с этим разобрался, класс убить смог. Но зачем дестрой-то? Как это побороть.

Пока решил проблему методом "Не давать погаснуть дислпею". Но это полумера, ведь есть кнопка.

PowerManager и WakeLock не помогли. Точнее опять та же полумера. Кнопка убивает приложение, приложение рвет связь по блютузу.

Что делать?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Лезет противный Destroy

Сообщение klblk » 27 мар 2014, 13:05

Service

Casper
Сообщения: 5
Зарегистрирован: 27 мар 2014, 12:43

Re: Лезет противный Destroy

Сообщение Casper » 27 мар 2014, 13:12

Краткость сестра таланта конечно. Но можно хотя бы чууууточку поподбробнее?
Буквально вот после написания осенило.

Прога имеет в манифесте принудительный альбомный режим.
При блокевроке телефон уходит в портретный и вот тут-то начинается возня с пересозданием активити. Но эт не дело. Это каждая софтина, которая вылезет (в том числе и звонок), будет разрушать мне активити, черт.

Мысля кружится - отдельный поток, в нем реализовать весь БТ обмен, и подсовывать ему хэндлер для сообщений. Но тут все стопится на вопросе, как блин с новой активири поймать этот отдельный поток, как то есть его вообще найти в системе.

Casper
Сообщения: 5
Зарегистрирован: 27 мар 2014, 12:43

Re: Лезет противный Destroy

Сообщение Casper » 27 мар 2014, 13:14

mt = (MyTask) getLastNonConfigurationInstance();
Найдет нужный процесс, если он не асинхронный?

public class USE_BT extends Thread {

... run
... myInitProcedure
... myDoneProcedure
... myExtendWorkProcedures

}

типа такого создано

Он же принимает хэндлер и при активном режиме шлет сообщения с БТ в активити, где с ними разбирается кусок кода.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Лезет противный Destroy

Сообщение klblk » 27 мар 2014, 13:24

Ну по сервису есть уроки на этом сайте. Он работает в отдельном потоке, не зависящем от ui (а при желании и в отдельном процессе).

Casper
Сообщения: 5
Зарегистрирован: 27 мар 2014, 12:43

Re: Лезет противный Destroy

Сообщение Casper » 27 мар 2014, 15:26

То есть мало геморроя с передачей данных по БТ, еще и возиться с обменом между службой и прогой?
Или я опять чего-то недопонял?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Лезет противный Destroy

Сообщение klblk » 28 мар 2014, 05:31

в целом да. Но я сказал не как проще, а как на мой взгляд правильнее сделать. А решать конечно вам.

Casper
Сообщения: 5
Зарегистрирован: 27 мар 2014, 12:43

Re: Лезет противный Destroy

Сообщение Casper » 31 мар 2014, 08:52

Что-то я упустил это сообщение, не поблагодарил.

В общем, спасибо. Раз все так, значит я на верном пути.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Лезет противный Destroy

Сообщение Mikhail_dev » 31 мар 2014, 09:10

Ладно бы он просто паузился, но он почему-то уничтожается, а блутузный класс остается висеть в подключенном состоянии. Ну с этим разобрался, класс убить смог. Но зачем дестрой-то? Как это побороть.
Вообще это странно, и что-то мне подсказывает что это беда самого телефона. Но если говорить о правильности, если у вас приложение может работать в фоне, то стоит задуматься о сервисе. Правда есть один нюанс. Если делать обычный сервис, то вы получите сервис в другом потоке, но всё же В ТОМ ЖЕ процессе. А я так понимаю onDestroy телефон делает не только активности, но и всему процессу. Т.е. тут может понадобится делать процесс в отдельном процессе. А там уже межпроцессорное взаимодействие (например можно почитать про AIDL)

Ответить