Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.79
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
#1

Завершение потока - Программирование Android

13.04.2013, 23:10. Просмотров 4318. Ответов 34
Метки нет (Все метки)

Необходимо корректно завершить поток.
Сейчас код такой
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class MyThread extends Thread
{
    private void method() throws InterruptedException
    {
        ...
    }
 
    public void run()
    {
        while(!isInterrupted())
        {
             try
             {
                 method();
                 super.sleep(...);
             }
             catch (Exception ex)
             {
                 ...
             }
        }
    }
}
То есть при любом исключении в потоке оно будет поймано.
Далее будет проверка на isInterrupted и если было прерывание, то поток завершится.
Но складывается впечатление, что поток вылетает. Не могу поймать где.

Правильно ли завершение потока ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2013, 23:10     Завершение потока
Посмотрите здесь:

Завершение потока AsyncTask - Программирование Android
Доброго времени суток. Возникла проблема с закрытием потока. Первый раз код выполняется и все норм, но т.к. при нажатии на кнопку...

Завершение сервиса - Программирование Android
вот метод завершающий сервис в основной активности: public void onClickStop(View v) { stopService(new Intent(this,...

Программное завершение приложения - Программирование Android
Здравствуйте. Как программно завершить приложение? То есть не завершить активность через finish(), а именно выйти из приложения вообще.

Коректное завершение программы - Программирование Android
Есть главное activity, которое запускает сервис. Сервис выполняет длительную операцию. При нажатии Back приложение сворачивается, сервис...

Завершение работы приложения - Программирование Android
у меня есть менюшка. там есть кнопочка quit, мне нужна чтоб она полностью прекращала работу приложения. Я пытаюсь сделать подобным образом:...

Завершение предыдущего активити (удаление из стека) - Программирование Android
товарищи, подскажите способы завершения предыдущего активити в стеке, чтобы по нажатию клавиши "назад" из последующего я уже не возобновлял...

Поиск и завершение всех Service программы - Программирование Android
Как убить все сервисы при выходе? У меня прога запускает в ходе работы четыре сервиса которые следят друг за другом и в случаи падения...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
14.04.2013, 22:05     Завершение потока #21
Цитата Сообщение от c4sp3r Посмотреть сообщение
сервис и так в отдельном потоке работает и расчитан чтобы в нем делать долгую работу нет надобности порождать еще потоки это не рекомендуется
ну вообщето это верно не во всех случаях: интент сервис запускает свои задачи в отдельном воркер треде, а обычный сервис работает в главном ui треде и если попытаться выполнить долгосрочную задачу (sleep например) то с лёгкостью словите ANR

<censored>, пока ответил уже опоздал
c4sp3r
14.04.2013, 23:07
  #22

Не по теме:

YAUHEN, да забыл добавить что это касается IntentService

xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
15.04.2013, 14:39  [ТС]     Завершение потока #23
Попробовал использовать AlarmManager
Java
1
2
3
4
5
6
7
8
        AlarmManager amanager = (AlarmManager)getSystemService(ALARM_SERVICE);
        if (amanager != null)
        {
            PendingIntent intent1 = createIntent(AlarmReceiver.ALARM_ACTION, AlarmReceiver.EXTRA_ALARM_1);
            PendingIntent intent2 = createIntent(AlarmReceiver.ALARM_ACTION, AlarmReceiver.EXTRA_ALARM_2);
            amanager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 3 * 60 * 1000, intent1);
            amanager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 5 * 60 * 1000, intent2);         
        }
То есть должны приходить 2 сообщения. Первое каждые 3 минуты, а второе кажые 5 минут.
Но приходит только первое и каждые 5 минут.

Так нельзя делать ?
Или один intent на один BroadcastReceiver ?
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
15.04.2013, 16:25     Завершение потока #24
xbarmaglot, почитай например это и станет понятнее:
http://startandroid.ru/ru/uroki/vse-...rmmanager.html
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
15.04.2013, 21:01  [ТС]     Завершение потока #25
В общем разобрался с AlarmManager.

Сделал используя AlarmManager и AsyncTask. Единственное, если закрывается мой процесс, то нужно ли прибивать AsyncTask
или система сама его прибъет. Просто если это поток, то можно вызывать Thread.interrupt и будут завершены все wait-функции.
Циклы же можно проверять на isInterrupted.

А как прервать выполнение AsyncTask, если там есть wait-функции?
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
15.04.2013, 23:43     Завершение потока #26
xbarmaglot,
http://developer.android.com/referen...AsyncTask.html
http://developer.android.com/referen...ancelled%28%29
http://developer.android.com/referen...l%28boolean%29
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.04.2013, 00:06     Завершение потока #27
Цитата Сообщение от xbarmaglot Посмотреть сообщение
А как прервать выполнение AsyncTask, если там есть wait-функции?
notifyAll()
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
20.04.2013, 23:16  [ТС]     Завершение потока #28
V0v1k, а где в документации сказано, что notifyAll прерывает wait-функции ?

Добавлено через 2 минуты
На сколько я знаю notify прерывет Object.wait.
А как быть с await, tryLock, ...
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.04.2013, 23:21     Завершение потока #29
Цитата Сообщение от xbarmaglot Посмотреть сообщение
На сколько я знаю notify прерывет Object.wait.
а бывает другой wait?
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
20.04.2013, 23:22  [ТС]     Завершение потока #30
Цитата Сообщение от V0v1k Посмотреть сообщение
а бывает другой wait?
await, tryLock, ...
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.04.2013, 23:22     Завершение потока #31
Цитата Сообщение от xbarmaglot Посмотреть сообщение
А как быть с await, tryLock, ...
для них, вероятно, есть свои методы, unlock() например.
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
20.04.2013, 23:22  [ТС]     Завершение потока #32
join
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.04.2013, 23:23     Завершение потока #33
а чем вас обычный wait не устраивает, лично я не встречал await и tryLock на практике.
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
20.04.2013, 23:26  [ТС]     Завершение потока #34
На счет прерывания
Java
1
Threads blocked in one of Object's wait() methods or one of Thread's join() or sleep() methods will be woken up, their interrupt status will be cleared, and they receive an InterruptedException.
то есть interrupt прерывает многие wait.
Да и tryLock тоже с ним дружит
Java
1
Acquires the lock if it is free within the given waiting time and the current thread has not been interrupted.
Получается, что поток можно завершить на любом ожидании, а асинхронную задачу нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2013, 11:42     Завершение потока
Еще ссылки по теме:

При попытке открыть второй и третий Activity происходит завершение работы программы - Программирование Android
Подскажите где ошибка. В программирование андроида пару дней. При попытке открыть второй и третий Activity происходит завершение работы...

Завершения потока - Программирование Android
Можно как-нить запустить новый поток, только после того как завершится первый???

Оповещение в UI из потока - Программирование Android
Доброго времени. суть проблеммы в сл. не работает повторное оповещение UI из потока. в приложении создаеЦа новый поток для выполнения некой...

Остановка потока - Программирование Android
Доброго времени суток. Пишу первое приложение под андроид, поэтому прошу сильно не пинать. Вопрос в следующем: на данный момент при...

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


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

Или воспользуйтесь поиском по форуму:
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
24.04.2013, 11:42  [ТС]     Завершение потока #35
Так как завершить AsyncTask ?
Yandex
Объявления
24.04.2013, 11:42     Завершение потока
Ответ Создать тему
Опции темы

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