Урок 100. Service. IntentService. Foreground. Автозагрузка сервиса
Урок 100. Service. IntentService. Foreground. Автозагрузка сервиса
В этом уроке:
- изучаем IntentService
- включаем режим Foreground для сервиса
- помещаем сервис в автозагрузку
Click here to read this article!
- изучаем IntentService
- включаем режим Foreground для сервиса
- помещаем сервис в автозагрузку
Click here to read this article!
Последний раз редактировалось damager82 22 май 2017, 23:49, всего редактировалось 7 раз.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Я не думал, что у некоторых пользователь постоянно сервис будет прибиваться, и это с гигом оперативки. Пришлось перейти на Foreground.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
ИМХО немного спутаны понятия потока и процесса.
Написанно:
Написанно:
Принцип работы этого вида сервиса прост. Он создает новый поток для своей работы. Затем берет все Intent пришедшие ему в onStartCommand и отправляет их на обработку в этот поток.
Хотя здесь написано правильно:Здесь необходим конструктор, в котором вызываем конструктор супер-класса и указываем какое-нить имя. Оно будет использовано для наименования потока
В первых двух случаях поток следует заменить на процессИ далее они поочередно обрабатываются в отдельном процессе методом onHandleIntent
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Речь во всех трех случаях идет о потоках.
Дополнительно о IntentService можно почитать в официальном руководстве
http://developer.android.com/guide/comp ... entService
Дополнительно о IntentService можно почитать в официальном руководстве
http://developer.android.com/guide/comp ... entService
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
ИМХО, в конце надо убрать на поток.
Сервис создается именно в отдельном потоке, если явно не указать ему что бы создавался в отдельном процессе.
Опоздал немного с ответом =)
Сервис создается именно в отдельном потоке, если явно не указать ему что бы создавался в отдельном процессе.
Опоздал немного с ответом =)
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Спасибо за исправление. Действительно в доках написано
значит везде должен быть потокlaunch a worker thread
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Спасибо! Ща пофиксю
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
поясните, я не понял, где создавать бродкаст для автозагрузки? В теле кода сервиса или в отдельном файле где-то?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
powercat
Необходимо создавать отдельный ресивер и в манифесте прописывать его запуск при загрузке устройства.
Необходимо создавать отдельный ресивер и в манифесте прописывать его запуск при загрузке устройства.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Вот так?
Сервис не запускается ((
Код: Выделить всё
public class broadcastReceiver extends BroadcastReceiver {
public void onReceive(Context arg0, Intent arg1) {
Log.d("myLogs","onReceive " + arg1.getAction());
arg0.startService(new Intent(arg0,MyService.class));
}
}
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
и еще вопрос...сервис запуститься с теми данными, что были в момент перезагрузки телефона? Т.е. у меня там работал таймер, выполнялись операции...что с этим случится?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
А в манифесте прописал событие при котором срабатывает ресивер?
Для старта при загрузке:
Перед пререзагрузкой устройства:
По поводу второго вопроса, если ты не сохранил данные сервиса перед выключением устройства, то ты потерял данные, так как при выключении устройства все процессы сервисов просто киляются без вызова у них onDestroy.
Для старта при загрузке:
Код: Выделить всё
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
Код: Выделить всё
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Вот код ресивера (пробовал для сервиса и для активити)
В обоих случаях - форс клос
Вот манифест
Код: Выделить всё
public class broadcastReceiver extends BroadcastReceiver {
public void onReceive(Context arg0, Intent arg1) {
Log.d("myLogs","onReceive " + arg1.getAction());
// arg0.startService(new Intent(arg0,MyService.class));
Intent ativivtyIntent = new Intent(arg0, Activity_Main.class);
ativivtyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
arg0.startActivity(ativivtyIntent);
}
}
Вот манифест
Код: Выделить всё
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:enabled="true" android:name=".BootReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter >
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
косяк запуска нашел - не то имя в манифесте )
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
а как данные сохранять при перезагрузке, я не понял...
Это надо отловить событие отключения, в том же бродкасте, и на них повесить запись...в базу, например, текущего состояния таймера, например, ???
Это надо отловить событие отключения, в том же бродкасте, и на них повесить запись...в базу, например, текущего состояния таймера, например, ???
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Я лично сделал отдельный ресивер на событие отключения и в нем вызываю остановку сервиса. А вся процедура сохранения у меня в onDestroy сервиса. Загрузка данных в onCreate.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
это понял уже, но не понял процесс сохранения...например, у меня есть таймер с работой по расписанию, в момент отключения девайса он работает, отсчитывает время до следующего действия...и как это сохранить-то?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Если надо создать напоминание
То что лучше использовать Service с потоком?
Я что-то читал об ManagerAlarm кто-то знает ?
То что лучше использовать Service с потоком?
Я что-то читал об ManagerAlarm кто-то знает ?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Поясните, плз.
Где именно и как должен вызываться метод startForeground?
(тема не раскрыта полностью в уроке)
Где именно и как должен вызываться метод startForeground?
(тема не раскрыта полностью в уроке)
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Вызываться должен в сервисе.BlkDem писал(а):Поясните, плз.
Где именно и как должен вызываться метод startForeground?
(тема не раскрыта полностью в уроке)
А вот насчет "как" - непонятно что вы имеете ввиду. Если речь о параметрах метода, то смотрите Урок 99 про уведомления.