Потоки в сервисе. Слежение за сервисом из 2 activity
Добавлено: 24 июл 2013, 03:37
Приветствую тех кто сможет помочь или ответит.
По просьбе друга, начал писать приложение радиоплеера дня 3-5 назад. Знания java и заложенных в нее стандартных методов, объектов на данный момент довольно скудны. В целом туда же можно отнести знания android sdk.
Вступление завершено. Теперь о уже написанном приложении:
Впоросы:
2 лайаута написано для того чтобы вызывать сервис радиоплеера для двух разных радиопотоков.
Каждое активити запускает один и тот же сервис, передавая ему ID потока, который надо запустить через intent.putExtra.
Нужно чтобы при запуске сервиса из другого активити запущенный ранее сервис(из первого активити) прекращал свое вещание.
Проблема в том, переодически сервис запускается из другого активити, но предыдущий продолжает свою работу и его не остановить. Я так понимаю, не вызывается функция onDestroy() старого сервиса и поток просто теряется.
Что в таком случае можно делать?
Один из способов воспроизведения такого бага часто нажимать на кнопку play/stop. Я планирую написать свой OnClickListener(сейчас onClick установлен в layout) и ставить кнопке play статус disabled, до тех пор пока плеер не запустится, но я не уверен что данное действие мне поможет.
Есть подозрение, что я дурак и так и не понял как работает intent, и я просто глушу сервис неправильно. Сейчас это:
[syntax=java]public final static String INTENT_FILTER = "ru.radioplayer.oneAct";
public final static String INTENT_FILTER_OTHER = "ru.radioplayer.twoAct";
stopService(new Intent(INTENT_FILTER_OTHER));
Intent intent = new Intent(MainTwo.this, RadioPlayer.class);
startService(intent);[/syntax]
Второй вопрос не совсем по теме, но частично связан с этим.
Нет ли более простого способа реализовать два разных layout с помощью вкладок и переключения их по swipe?
Проведи пальцем влево, откроется 2 лайаут и вверху сменится таб на 2. Вправо - первый.
гугл и данный сайт дали мне 2 результата за первые 5 минут поисков. Их я не реализовывал, но может быть кто-то заранее посоветует то, что подойдет мне.
1. savagelook.com/blog/android/swipes-or-flings-for-navigation-in-android
2. http://startandroid.ru/ru/uroki/vse-uro ... oe-vkladki
По просьбе друга, начал писать приложение радиоплеера дня 3-5 назад. Знания java и заложенных в нее стандартных методов, объектов на данный момент довольно скудны. В целом туда же можно отнести знания android sdk.
Вступление завершено. Теперь о уже написанном приложении:
- android:minSdkVersion="8" android:targetSdkVersion="8" планирую ввести Android Support Lib для поддержки разных версий sdk. Но пока пишу для 2.2. Различия между api 16 только в notification.
- Foreground сервис с асинхронным вызовом playRadio(playRadio поставляется сторонней библиотекой, написанной не мною). MediaPlayer не подходит.
- Библиотека playRadio. В наличии callback интерфейс(это вроде так называется) по смене состояний плеера и 2 функции проигрывания: асинхронное и синхронное.
- 2 активити с одинаковым( 1в1 ) набором функций, но использующие разный layout.id.
Впоросы:
2 лайаута написано для того чтобы вызывать сервис радиоплеера для двух разных радиопотоков.
Каждое активити запускает один и тот же сервис, передавая ему ID потока, который надо запустить через intent.putExtra.
Нужно чтобы при запуске сервиса из другого активити запущенный ранее сервис(из первого активити) прекращал свое вещание.
Проблема в том, переодически сервис запускается из другого активити, но предыдущий продолжает свою работу и его не остановить. Я так понимаю, не вызывается функция onDestroy() старого сервиса и поток просто теряется.
Что в таком случае можно делать?
Один из способов воспроизведения такого бага часто нажимать на кнопку play/stop. Я планирую написать свой OnClickListener(сейчас onClick установлен в layout) и ставить кнопке play статус disabled, до тех пор пока плеер не запустится, но я не уверен что данное действие мне поможет.
Есть подозрение, что я дурак и так и не понял как работает intent, и я просто глушу сервис неправильно. Сейчас это:
[syntax=java]public final static String INTENT_FILTER = "ru.radioplayer.oneAct";
public final static String INTENT_FILTER_OTHER = "ru.radioplayer.twoAct";
stopService(new Intent(INTENT_FILTER_OTHER));
Intent intent = new Intent(MainTwo.this, RadioPlayer.class);
startService(intent);[/syntax]
Второй вопрос не совсем по теме, но частично связан с этим.
Нет ли более простого способа реализовать два разных layout с помощью вкладок и переключения их по swipe?
Проведи пальцем влево, откроется 2 лайаут и вверху сменится таб на 2. Вправо - первый.
гугл и данный сайт дали мне 2 результата за первые 5 минут поисков. Их я не реализовывал, но может быть кто-то заранее посоветует то, что подойдет мне.
1. savagelook.com/blog/android/swipes-or-flings-for-navigation-in-android
2. http://startandroid.ru/ru/uroki/vse-uro ... oe-vkladki