stopService (intent_with_extras) - как вы читаете эти дополнения из службы, чтобы остановить? - PullRequest
3 голосов
/ 14 января 2011

У меня есть Сервис, который можно остановить несколькими способами.Всякий раз, когда я вызываю stopService (Intent), я передаю намерение с некоторыми дополнениями.Как вы получаете эти дополнения?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 14 января 2011

Вам необходимо переопределить onStartCommand() в вашем Service, так вы получите ссылку на входящее намерение от startService.

В этом случае у вас будет специальное действие, направленное на то, чтобы служба остановилась. Вы добавляете дополнения к этому намерению, которые можно прочитать в методе onStartCommand().

Пример кода

public class MyService extends Service {
    @Override
    public int onStartCommand(final Intent intent, final int flags, final int startId) {
         final String yourExtra = intent.getStringExtra(YOUR_EXTRA_ID);
         // now you can e.g. call the stopSelf() method but have the extra information
    }
}

Объяснение

Каждый раз, когда вы звоните, context.startService(Intent) onStartCommand() будет вызываться. Если служба уже запущена, новая служба не создается, но onStartCommand все еще вызывается. Вот как вы можете получить новое намерение с дополнениями для работающей службы.

4 голосов
/ 26 декабря 2012

Я обнаружил, что дополнительные функции не передаются с намерением при вызове stopService.В качестве обходного пути просто вызовите startService (Intent) и stopService (Intent) сразу после друг друга.

Пример кода из Activity:

Intent j = new Intent(SocketToYa.this, AccelerometerDataSocket.class); j.putExtra("com.christophergrabowski.sockettoya.DestroyService", true); startService(j); stopService(j);

В Service.onStartCommand,

intent.hasExtra("com.christophergrabowski.sockettoya.DestroyService")

оценивается как true, и вы уничтожите свой сервис способом, предусмотренным API (т. Е. Вызовом stopService, который, в свою очередь, вызовет OnDestroy после вызова onStartCommand).

1 голос
/ 14 января 2011

Можете ли вы использовать Intent с действием "shutdown" с Context.startService ()?

То есть, отправлять Intent с действием shutdown и дополнениями в Service.onStartCommand (), решить, какчтобы завершить работу на основе дополнительных возможностей, затем используйте Service.stopSelf (), чтобы остановить службу.

Я согласен, что это не очень удачное решение, поскольку он потенциально запускает службу для ее отключения.Я все еще хотел бы услышать о "правильном" способе (если таковой существует) сделать это с Context.stopService ().

1 голос
/ 14 января 2011

Мое предложение заключается в том, чтобы использовать статический член в классе, который расширяет Activity для передачи информации в службу и ее в службу, как обычный доступ статического члена во внешний класс

Пожалуйста, не делайте этогоесли у вас нет другого выбора.Вы должны попытаться использовать механизмы, встроенные в структуру для передачи данных, и не использовать поля public static, если нет другого выбора.Прочитайте Service документацию для примеров.

0 голосов
/ 14 января 2011

Вы не можете написать

getIntent ()

метод в классе, расширяющем Service.Поэтому я думаю, что использование getExtra () не сработает.Мое предложение заключается в том, чтобы использовать статический член в классе, который расширяет Activity для передачи информации в службу, а она в службе, как обычный статический доступ к элементу во внешнем классе, например*.см. эту ссылку для другого варианта http://developer.android.com/resources/faq/framework.html#3

...