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;
}
}
Ответы
Ответ 1
Используйте IntentService
вместо Service
. Если вы выполняете сетевые вызовы в Service
, пользовательский интерфейс будет зависеть. Поэтому используйте IntentService
, так как он использует отдельный Thread
.
И вы не знаете, когда сообщение сервера будет извлекать данные. A NullPointerException
может быть сброшен, если объекты будут доступны, пока сетевые вызовы все еще продолжаются. Используйте BroadcastReceiver
для запуска Intent
, когда сервер отвечает.
Ответ 2
Насколько я знаю, служба Android работает в потоке пользовательского интерфейса. Если вы хотите выполнить асинхронное задание, вы должны использовать Intent Service
Видеть:
В чем разница между IntentService и службой?
Здесь приведен пример Пример использования Intent.