Как BroadcastReceive рассказывает Сервис? - PullRequest
0 голосов
/ 29 мая 2011

на основной деятельности нажмите кнопку, чтобы запустить услугу

служба выполнит эти работы:

1, случайная 10 отметка времени на сегодня

2, когда приходит каждая временная метка, она будет выполнять задачу

Теперь я написал функцию 1, и когда пришла первая временная метка, я мог бы запустить первое задание

Мой способ состоит в том, чтобы зарегистрировать приемник вещания для метки времени через alarmmanager, когда запускается первая трансляция, затем зарегистрировать вторую метку времени и так далее .....

Вот мой вопрос: когда вещательный приемник запущен, как сказать службе зарегистрировать следующую метку времени, а затем завершить всю работу?

Или это другой способ реализации моего сервиса?

Заранее спасибо!

1 Ответ

0 голосов
/ 29 мая 2011

Ты не должен так поступать, я думаю.

Я вижу, по крайней мере, два недостатка в вашем методе: - алармангер будет слишком занят - вы не можете зарегистрировать широковещательный приемник от другого широковещательного приемника

Другой, лучший способ сделать этобудет использовать метод handler.postDelayed:

Ваш сервис должен попросить обработчика вернуться через несколько секунд (когда вы захотите)

@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {    
    //do some treatment based on the action intent
    //first action is used to compute 10 time stamps

    //second action is used to treat task

    //then use a handler to reschedule your service
    handler.postDelayed( new Runnable() {
        @Override
        public void run() {
           onStartCommand( <intent for action 2>, flags, startId);
           Log.v( LOG_TAG, "timer sending intent");
        }
    }, delayInMsToNextTask  );
}//met

Таким образом, нет никакого способадля радиовещательного приемника.

И я забыл сказать, что вы должны зарегистрировать свой сервис для двух намеренных действий в файле манифеста.

<service android:name="myService">
    <intent-filter>
      <action android:name="action1" />
    </intent-filter>
    <intent-filter>
      <action android:name="action2" />
    </intent-filter>
</service>

Кроме того, было бы неплохо добавить одно действие, но чтобы отличить то, что onStartCommand должен делать, используя дополнительные функции в намерениях с тем же именем.Тогда ваша служба будет регистрироваться для одного действия в вашем манифесте.

В следующий раз, если вы чувствуете, что ваши объяснения не так ясны, пожалуйста, пришлите какой-нибудь код / ​​псевдокод.1019 *

...