Страница 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 про уведомления.