Страница 1 из 5
Урок 100. Service. IntentService. Foreground. Автозагрузка сервиса
Добавлено: 29 июл 2012, 23:00
damager82
В этом уроке:
- изучаем IntentService
- включаем режим Foreground для сервиса
- помещаем сервис в автозагрузку
Click here to read this article!
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 08 сен 2012, 09:28
neoksi
Я не думал, что у некоторых пользователь постоянно сервис будет прибиваться, и это с гигом оперативки. Пришлось перейти на Foreground.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 30 сен 2012, 17:25
Bersh
ИМХО немного спутаны понятия потока и процесса.
Написанно:
Принцип работы этого вида сервиса прост. Он создает новый поток для своей работы. Затем берет все Intent пришедшие ему в onStartCommand и отправляет их на обработку в этот поток.
Здесь необходим конструктор, в котором вызываем конструктор супер-класса и указываем какое-нить имя. Оно будет использовано для наименования потока
Хотя здесь написано правильно:
И далее они поочередно обрабатываются в отдельном процессе методом onHandleIntent
В первых двух случаях
поток следует заменить на
процесс
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 30 сен 2012, 18:20
AndreyI
Речь во всех трех случаях идет о
потоках.
Дополнительно о IntentService можно почитать в официальном руководстве
http://developer.android.com/guide/comp ... entService
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 30 сен 2012, 18:25
Mikhail_dev
ИМХО, в конце надо убрать на поток.
Сервис создается именно в отдельном потоке, если явно не указать ему что бы создавался в отдельном процессе.
Опоздал немного с ответом =)
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 30 сен 2012, 21:32
Bersh
Спасибо за исправление. Действительно в доках написано
launch a worker thread
значит везде должен быть поток
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 02 окт 2012, 10:32
damager82
Спасибо! Ща пофиксю
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 14:29
powercat
поясните, я не понял, где создавать бродкаст для автозагрузки? В теле кода сервиса или в отдельном файле где-то?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 14:37
neoksi
powercat
Необходимо создавать отдельный ресивер и в манифесте прописывать его запуск при загрузке устройства.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 14:59
powercat
Вот так?
Код: Выделить всё
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. Автозагруз
Добавлено: 03 окт 2012, 15:10
powercat
и еще вопрос...сервис запуститься с теми данными, что были в момент перезагрузки телефона? Т.е. у меня там работал таймер, выполнялись операции...что с этим случится?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 15:19
neoksi
А в манифесте прописал событие при котором срабатывает ресивер?
Для старта при загрузке:
Код: Выделить всё
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
Перед пререзагрузкой устройства:
Код: Выделить всё
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
По поводу второго вопроса, если ты не сохранил данные сервиса перед выключением устройства, то ты потерял данные, так как при выключении устройства все процессы сервисов просто киляются без вызова у них onDestroy.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 15:25
powercat
Вот код ресивера (пробовал для сервиса и для активити)
Код: Выделить всё
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. Автозагруз
Добавлено: 03 окт 2012, 15:32
powercat
косяк запуска нашел - не то имя в манифесте )
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 15:33
powercat
а как данные сохранять при перезагрузке, я не понял...
Это надо отловить событие отключения, в том же бродкасте, и на них повесить запись...в базу, например, текущего состояния таймера, например, ???
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 15:46
neoksi
Я лично сделал отдельный ресивер на событие отключения и в нем вызываю остановку сервиса. А вся процедура сохранения у меня в onDestroy сервиса. Загрузка данных в onCreate.
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 03 окт 2012, 16:16
powercat
это понял уже, но не понял процесс сохранения...например, у меня есть таймер с работой по расписанию, в момент отключения девайса он работает, отсчитывает время до следующего действия...и как это сохранить-то?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 02 ноя 2012, 13:52
Василь
Если надо создать напоминание
То что лучше использовать Service с потоком?
Я что-то читал об ManagerAlarm кто-то знает ?
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 08 ноя 2012, 06:26
BlkDem
Поясните, плз.
Где именно и как должен вызываться метод startForeground?
(тема не раскрыта полностью в уроке)
Re: Урок 100. Service. IntentService. Foreground. Автозагруз
Добавлено: 09 ноя 2012, 11:42
damager82
BlkDem писал(а):Поясните, плз.
Где именно и как должен вызываться метод startForeground?
(тема не раскрыта полностью в уроке)
Вызываться должен в сервисе.
А вот насчет "как" - непонятно что вы имеете ввиду. Если речь о параметрах метода, то смотрите Урок 99 про уведомления.