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; } } 

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

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

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

Intereting Posts
Объявление Android Flurry не отображается Как обновить базу данных SQLite и НЕ потерять все существующие данные? Отключить анимацию TextInputLayout Добавление нескольких маркеров на карте google в android Не удалось запустить сервис Intent {act = com.google.android.c2dm.intent.REGISTRATION (имеет дополнительные функции)} U = 0: не найден Программирование с помощью SurfaceView и стратегии потоков для разработки игр Java.lang.ClassCastException: Android.support.v7.widget.ContentFrameLayout не может быть добавлен в файл Android.support.v7.widget.ContentFrameLayout Предварительный просмотр webview Могу ли я получить идентификатор заказа Google Checkout для приобретенного приложения Android из самого приложения? Если активность убита, работает ли AsyncTask? Как очистить предыдущий стек активности и выйти из приложения на кнопку «Назад»? Добавление фрагмента поверх другого фрагмента по проблемеClickListener В Android – Как зарегистрировать только длинные клики с помощью ClickableSpan Почему Google не использует Golang или python в качестве языка для Android? Преимущество ListFragment над ListView или нормальным фрагментом