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

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

Войти
Регистрация
Восстановить пароль
 
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,686
Записей в блоге: 3
#1

Запустить сервис в другом потоке - Программирование Android

13.07.2016, 14:32. Просмотров 440. Ответов 8
Метки нет (Все метки)

Как правильно запустить сервис в другом потоке?

Сервис должен работать всегда (даже когда приложение закрыто)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2016, 14:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запустить сервис в другом потоке (Программирование Android):

Работа с сетью в другом потоке. Нужно получить результат - Программирование Android
class AnotherThread extends Thread { @Override public void run() { try { ...

Как из Активити запустить сервис ? - Программирование Android
Друзья как из Активити запустить сервис я знаю, но проблема в том что после того как я запускаю сервис и прописываю в него действия которые...

Как из одного потока вызвать метод таким образом, чтобы он выполнялся в другом потоке - Программирование Android
Значит имеется некая активность, которая запускает сервер по нажатии кнопки, этот сервер в свою очередь запускает выполнение своей фоновой...

Работа с Dictionary в одном потоке, при этом он может изменятся в другом потоке - C#
Здравствуйте! Я делаю лабу сервер распределенных вычислений в сети. В одном потоке ожидаю клиентов и на каждого клиента создаю поток. ...

Элементы управления, созданные в одном потоке, не могут быть родительскими для элемента управления в другом потоке - C#
Привет :) Есть задача - нужно динамически добавлять компоненты. Все работает хорошо. Но если добавлять через цикл то начинает зависать...

ProgressBar в другом потоке - C#
Есть приложение, которое заносит в БД тысячи строк, соответственно форма подтормаживала, процедуру занесения вынес в отдельный поток. Хотел...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Борис Верещагин
60 / 39 / 12
Регистрация: 14.01.2016
Сообщений: 183
Завершенные тесты: 4
13.07.2016, 15:13 #2
Java
1
2
3
4
5
6
Thread t = new Thread(){
    public void run(){
        //запустить сервис
    }
};
t.start();
0
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,275
13.07.2016, 16:03 #3
сервис же компонент главного потока то есть UI. Там же активити, сервис, ресивер и провайдер. Сервис запускается в основном потоке, а разве можно его запустить в другом потоке?
0
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,686
Записей в блоге: 3
13.07.2016, 16:06  [ТС] #4
Сервисы запускаются в главном потоке приложения; это значит, что любые операции, выполняющиеся в обработчике onStartCommand(), будут работать в контексте главного потока GUI. На практике при реализации сервиса в методе onStartCommand() создают и запускают новый поток, чтобы выполнять операции в фоновом режиме и останавливать сервис, когда работа завершена.

Так и сделал
0
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,275
13.07.2016, 16:07 #5
Java
1
2
3
4
5
6
Thread t = new Thread(){
    public void run(){
        //запустить сервис
    }
};
t.start();
а причем этот код тогда?
0
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,686
Записей в блоге: 3
13.07.2016, 16:29  [ТС] #6
Если в сервисе делаю следующее:
Java
1
2
3
4
5
6
7
8
9
10
@Override
    public void onCreate() {
        Notification.Builder builder = new Notification.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher);
        Notification notification;
        if (Build.VERSION.SDK_INT < 16)
            notification = builder.getNotification();
        else
            notification = builder.build();
        startForeground(777, notification);
то при полном закрытии приложения (активностей) сервис продолжает работать..

А если не выводить Notification сообщение то при закрытии приложения сервис тоже грохается.

Вопрос как сделать сервис независимым от приложения(активностей)?
0
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
13.07.2016, 16:50 #7
ILNAR_93, сервис и так не зависит от активностей. во всех приведенных примерах сервиса мы что то так и не увидели
0
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,686
Записей в блоге: 3
13.07.2016, 16:57  [ТС] #8
vxg,
Я на счет того что если пользователь очистить недавно открытые приложения то сервис тоже грохается..
Там так-же есть пример с Notification сообщением - для того чтобы сервис не грохался при очистке недавних приложений

Есть статья в хабре https://habrahabr.ru/post/265159/

Со статьи:
Официальная документация гласит, что ОС Android останавливает службу только в случае нехватки памяти. Тем не менее, существует и другие случаи. Пользователь может сам остановить службу, используя предоставляемые ему средства меню Settings/Apps, там же он может сделать и полную остановку приложения. Но для этого ему надо напрягаться и, в общем-то осознавать свои действия и их последствия. К сожалению, для уничтожения службы у него есть и другие возможности, которыми он может пользоваться бессознательно. В частности, если в нашем приложении ранее была запущена хоть одна Activity, видимая в истории, то пользователь буквально одним движением пальца сможет вынести соответствующую задачу. Как ни парадоксально, попутно Android вышибет и весь процесс вместе со службой.
Лично мне такое поведение Android логичным не кажется. Пользователь зачастую просто чистит Recent Apps от давно забытого хлама, совсем не обязательно он при этом желает отказаться от тех благ, которые ему предоставляла выполняющаяся служба. Однако разработчики Google мыслили немного по-другому. По-другому, так по-другому, их право, но в конце концов нам с вами тоже надо как-то жить.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
15.07.2016, 18:30 #9
Когда-то разобрался с этим (правда уже пол года за андроид не брался - подзабыл немножко)...

Есть понятие аппликэйшн. Все активити работают "из него". Сервис тоже запускается "от аппликэйшн". При полном закрытии программы (нажать хоум и слвайпом удалить программу) иногда убиваются и сервисы.
Можно обнадежить выведя нотиф. (как указано выше). Где-то встречал как сделать "невидимый нотиф" (типа вызывается, но не выводится). Где-то встречал как вызвать сервис "с повышенными правами" (без рута - хакерский прием - типа как "системную" помечаем).
А можно вызвать из глобального ресивера. Но если он создан И в активити, то он все еще привязан к основному аппликэйшн. Можно его вызвать сразу из ресивера (отправив из активити "запрос"). Тогда сервис создаст "копию" аппликэйшн (я долго это разбирал - хранил глобальные переменные в классе аппликэшн и они то были доступны, то пропадали).
Если ресивер "общий" (например на изменение заряда), то сервис будет часто "перезапускаться" - так можно его "обнадежить" даже на случай зависания/перезагрузки. (ресивер "при запуске устройства" иногда не вызывается).

запуск из потока не пробовал! Но подозреваю что все потоки запущенные из активити привязаны к одному аппликэйшн, а он убивается вместе с программой (удалением ее из памяти)

...вроде все! удачи...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2016, 18:30
Привет! Вот еще темы с ответами:

Работа в другом потоке с WebBrowser - C#
Здрасте... У меня вопрос, возможно ли как-то осуществить(продолжить\передать) работу с WebBrowser в другом потоке? у меня получается на...

Drag and drop в другом потоке - Visual Basic .NET
Есть такой код : Private Sub Form1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles...

Ивент с реакцией в другом потоке - C#
В главном потоке происходит событие, к примеру А = 5. Как сделать так чтобы на смену значения А, в другом потоке , паралельно...

Отправка почты в другом потоке - C++ Builder
Народ, мне надо отправить почту в дугом потоке, чтобы програ не висла. С помощью компонентов NMSMTP или IdSMTP. Программу написал, в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2016, 18:30
Ответ Создать тему
Опции темы

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