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

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

Войти
Регистрация
Восстановить пароль
 
__romka_
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
30.12.2015, 12:07     Как не допустить создание потока еще раз? #1
Задача.
Выполнять действие в фоне даже после закрытия приложения (в отдельном потоке) - работает.

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

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.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2015, 12:07     Как не допустить создание потока еще раз?
Посмотрите здесь:

Как менять image по нажатию?(много раз) Android
Как из одного потока вызвать метод таким образом, чтобы он выполнялся в другом потоке Android
Android Расширил класс Button. Как нужно подправить XML-layout? Еще ClassCastException
Как можно в progressBar вернуть прогресс нужного потока? Android
Android Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД)
Android Как получить значение String из UI потока в потоке AsyncTask?
Android TextToSpeech, как вызвать speak несколько раз подряд?
Android Как вытащить данные из потока. Cant create handler inside thread that has not called Looper.prepare()
Как забрать данные из отработавшего потока? Android
Android UiThread, как вынести процесс из главного потока?
Android Как организовать еще одно место для обрабатывания процедур?
Android Как определить, платил ли пользователь хоть один раз?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
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, "Сервис уже запущен.");
        }
__romka_
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
30.12.2015, 20:57  [ТС]     Как не допустить создание потока еще раз? #3
))))))))))

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

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


т.к. проверку я делаю из этого же сервиса.
А мне нужно понять - работает ли в фоне поток, который я запустил ранее, чтобы знать - запускать его ил нет.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
30.12.2015, 21:25     Как не допустить создание потока еще раз? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
__romka_, сервис всегда существует в единственном экземпляре.
Если сервис запускается в первый раз, вызовется метод onCreate. Если уже был запущен и Вы попробуете запустить еще раз, то вызовется сразу onStart
Yandex
Объявления
30.12.2015, 21:25     Как не допустить создание потока еще раз?
Ответ Создать тему
Опции темы

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