Служба Android и поток пользовательского интерфейса

У меня есть служба, работающая в моем приложении.

Эта служба имеет объект для отправки сообщения на сервер и функцию для получения этого объекта и его использования.

Объект инициализируется из службы, и все же, когда пользовательский интерфейс получает эти объекты и использует их, похоже, что он использует его в потоке пользовательского интерфейса.

Это правильно ? Есть ли способ заставить мой объект всегда запускаться из потока службы?

public class ServerMessagesManager extends Service {
    private ServerMessagesReceiver serverMessageReceiver;
    @Override
    public void onCreate() {
        super.onCreate();
        this.serverMessageReceiver = new ServerMessagesReceiver(app);
    }

    public ServerMessagesReceiver getServerMessagesReceiver()
    {
        return serverMessageReceiver;
    }
}

person Asaf Nevo    schedule 05.02.2013    source источник
comment
служба работает в потоке пользовательского интерфейса. взгляните на службу намерений для служб, которые запускают часть процесса в отдельном потоке.   -  person njzk2    schedule 05.02.2013


Ответы (2)


Используйте IntentService вместо Service. Если вы выполняете сетевые вызовы в Service, пользовательский интерфейс зависает. Поэтому используйте IntentService, так как он использует отдельный Thread.

И вы не знаете, когда сообщение сервера извлечет данные. NullPointerException может быть сгенерировано, если доступ к объектам осуществляется, пока продолжаются сетевые вызовы. Используйте BroadcastReceivers для запуска Intent всякий раз, когда сервер отвечает.

person koti    schedule 05.02.2013

Насколько я знаю, служба Android работает в потоке пользовательского интерфейса. Если вы хотите выполнить асинхронное задание, вам следует использовать Intent Service
См.: В чем разница между IntentService и Service?
Вот Пример сервиса Intent, который вы можете попробовать.

person R4j    schedule 05.02.2013