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

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

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

Как не допустить создание потока еще раз? - Программирование Android

30.12.2015, 12:07. Просмотров 264. Ответов 3
Метки нет (Все метки)

Задача.
Выполнять действие в фоне даже после закрытия приложения (в отдельном потоке) - работает.

Но вот после повторного запуска приложения я пытаюсь проверить запущен ли поток и если нет - запустить его:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void myBackThreads() {
        final Thread myThread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    longTask.doInBackground();
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
 
            }
        });
    if (!myThread.isAlive()){
        myThread.start();
    }
   }
Проблема в том, что даже если поток запущен - запускается еще один. И так при каждом повторном запуске приложения...

Я проверял их ID. Потоки создаются с разными ID.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2015, 12:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как не допустить создание потока еще раз? (Программирование Android):

Еще раз о календаре... Как привязаться к Calendar1_SelectionChanged? - Visual Basic .NET
В дополнение к топику http://www.relib.com/forums/topic.asp?id=834179 Я поставил кнопку и добавил к ней attributes.add('onclick',...

Как найти слово в Word-ском файле ЕЩЕ РАЗ :( - Visual Basic
Мне подсказали, что это работает: With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = '123' 'то, что ищем ...

Как не запускать процесс еще раз если он уже запущен - C#
Здраствуйте, мне в visual studio нужно сделать так чтобы при нажатии кнопки запускалась программа, как сделать так если при нажатии второй...

Как через goto вернуться назад, чтоб еще раз проверить функцию? - C++
ребят,подскажите пожалуйста,как мне через goto вернуться назад,чтоб еше раз проверить мою функцию? ...

Кто знает, как вызвать еще раз последнего противника в NFS Most Wanted? - Симуляторы
Проблема такая, хотел пройти последнюю гонку с ментами (концовку), но выключил игру. Хотелось бы пройти последнее состезание (стать первым...

как сделать что бы после решения 1 примера пользевателю предлагало еще раз воспользоваться? - C++
#include <iostream> using namespace std; void main() { int N = 1; int num1 = 0; int num2 = 0; int result = 0; char...

3
DarkVortex
103 / 69 / 18
Регистрация: 07.07.2014
Сообщений: 240
30.12.2015, 12:26 #2
Просто проверяй запущен ли твой сервис или нет, как-то так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningServiceInfo> rs = am.getRunningServices(50);
        boolean run = false;
        for (int i = 0; i < rs.size(); i++) {
            ActivityManager.RunningServiceInfo rsi = rs.get(i);
            if(rsi.service.getClassName().contains("ServiceClassName")){
                run = true;   
            }
        }
        if(!run){
            Log.d(LOG_TAG, "Запускаем сервис.");
            context.startService(new Intent(context, ServiceClassName.class));
        }else{
            Log.d(LOG_TAG, "Сервис уже запущен.");
        }
0
__romka_
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
30.12.2015, 20:57  [ТС] #3
))))))))))

1. Запускаем приложение в первый раз и делаем проверку, которую вы привели.
>>>> сервис запущен
2. Выходим из приложения, потом опять заходим и делаем эту же проверку.
>>>> сервис запущен

Это не догадки. Я проверил.


т.к. проверку я делаю из этого же сервиса.
А мне нужно понять - работает ли в фоне поток, который я запустил ранее, чтобы знать - запускать его ил нет.
0
YuraAAA
1578 / 1319 / 271
Регистрация: 25.10.2009
Сообщений: 3,437
Записей в блоге: 2
30.12.2015, 21:25 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
__romka_, сервис всегда существует в единственном экземпляре.
Если сервис запускается в первый раз, вызовется метод onCreate. Если уже был запущен и Вы попробуете запустить еще раз, то вызовется сразу onStart
1
30.12.2015, 21:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2015, 21:25
Привет! Вот еще темы с ответами:

Еще раз об ui - C++ Qt
Недавно была тема где это затрагивалось. Но я считаю это достойно отдельной темы, так как окончательного ответа не получил и в гугле найти...

Еще раз об операции new - C++
Верно ли что если я, выделив память операцией new, а затем забыв вернуть ее соответствующим delete, получу утечку памяти? Ну это легкий...

Еще раз о списках - Lisp
Дан список ( (x x x x . . .) (x x x x . . .) ) . Увеличить каждый элемент на единицу. Нужно сделать на подобие такого: Дан список...

Еще раз о поиске. - MS Access
Привет! Помогите, пожалуйста! Есть таблица №|ТипДокумента| ВидДокумента| ПолноеНаименование| НомерДокумента| ДатаЗаключения|. Нужно...


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

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

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